如何给所有的 await async 函数添加try/catch?做全局捕获异常。

面试官:如何给所有的 await async 函数添加try/catch?做全局捕获异常。
我们可以使用 window.addEventListener('unhandledrejection', function (event) {})
读音: unhandled 【an han dou】 rejection 【rɪ 'dʒe k ʃ(ə)n】
event有个reason属性,里面有error的message和堆栈信息…
要event.preventDefault()阻止冒泡才行 mdn 对于 unhandledrejection 的解释
当 Promise 被 reject 且没有 reject 处理器的时候,会触发 unhandledrejection 事件;
这可能发生在 window 下,但也可能发生在 Worker 中。
这对于调试和为意外情况提供后备错误处理非常有用。

我们来看一下下面这一段代码

async function fn() {
let value = await new Promise((resolve, reject) => {
reject('我报错啦');
})
console.log('do something...');
}
fn()

出现的现象

好家伙直接在控制台报错了。后面又没有捕获异常。
那怎么去解决这个问题呢?
可以使用catch捕获异常

使用catch处理异常

async function fn() {
let value = await new Promise((resolve, reject) => {
reject('我报错啦');
}).catch(err=>{
console.log('捕获到了异常:',err)
})
console.log('do something...');
}
fn()

喊上层自己处理(手动狗头)

async function fn() {
let value = await new Promise((resolve, reject) => {
reject('我报错啦');
})
console.log('do something...');
}
fn().then(res=>{
console.log('res',res)
}).catch(err=>{
console.log('上层使用者捕获:',err)
})

捕获 window.addEventListener 捕获异常

window.addEventListener("unhandledrejection", function (event) {
console.log('全局捕获', event )
event.preventDefault()
})
async function fn() {
let value = await new Promise((resolve, reject) => {
reject('failure');
})
console.log('do something...');
}
fn()

用最简单的语言总结一下

unhandledrejection 事件监听 reject异常。
或者说 unhandledrejection 最全局异常捕获
再者说 unhandledrejection给所有的 await async 函数添加try/catch

如何给所有的 await async 函数添加try/catch?的更多相关文章

  1. es6的箭头函数转换为普通函数,以及将await/async函数转为普通函数

    箭头函数转为普通函数: 1. 安装babel-preset-es2015  npm install babel-preset-es2015 --save-dev 2.在.babelrc文件夹中:  & ...

  2. JS异步操作新体验之 async函数

    1.初识 async 函数   ES6中提供了两个很好的解决异步操作的方案 Promise 和 Generator,ES2017标准中引入的 async 函数就是建立在 Promise 和 Gener ...

  3. Promise,Generator,Await/Async

    上节中忘记讲:Iterator接口和Generator函数的关系了,Symbol.iterator方法的最简单的实现就是通过Generator函数: let myIterable = { [Symbo ...

  4. 浅谈async函数await用法

    今天状态不太好,睡久了懵一天. 以前只是了解过async函数,并还没有很熟练的运用过,所以先开个坑吧,以后再结合实际来更新下,可能说的有些问题希望大家指出. async和await相信大家应该不陌生, ...

  5. ECMAScript 6 学习(二)async函数

     1.什么是async函数 2.用法 2.1基本用法 3.语法 3.1返回promise对象 3.2promise状态的变化 3.3await命令 1.什么是async函数 async函数也是异步编程 ...

  6. ES2017中的async函数

    前面的话 ES2017标准引入了 async 函数,使得异步操作变得更加方便.本文将详细介绍async函数 概述 async 函数是 Generator 函数的语法糖 使用Generator 函数,依 ...

  7. 如何避免 await/async 地狱

    原文地址:How to escape async/await hell 译文出自:夜色镇歌的个人博客 async/await 把我们从回调地狱中解救了出来,但是如果滥用就会掉进 async/await ...

  8. 如何更好的编写async函数

    2018年已经到了5月份,node的4.x版本也已经停止了维护 我司的某个服务也已经切到了8.x,目前正在做koa2.x的迁移 将之前的generator全部替换为async 但是,在替换的过程中,发 ...

  9. es6学习笔记-async函数

    1 前情摘要 前段时间时间进行项目开发,需求安排不是很合理,导致一直高强度的加班工作,这一个月不是常说的996,简直是936,还好熬过来了.在此期间不是刚学会了es6的promise,在项目有用到pr ...

  10. js-ES6学习笔记-async函数

    1.async 函数是 Generator 函数的语法糖.前文有一个 Generator 函数,依次读取两个文件. var fs = require('fs'); var readFile = fun ...

随机推荐

  1. Python图像处理丨基于K-Means聚类的图像区域分割

    摘要:本篇文章主要讲解基于理论的图像分割方法,通过K-Means聚类算法实现图像分割或颜色分层处理. 本文分享自华为云社区<[Python图像处理] 十九.图像分割之基于K-Means聚类的区域 ...

  2. iOS App 上架流程图文教学

    在上架 App 之前必须先准备好开发者帐号,但申请开发者帐号因法兰克早在之前已经申请好了,故就跳过此步骤,直接从产生凭证到上传 App 开始讲起.首先,要将自己辛苦写好的 App 送审的话,则要依序做 ...

  3. PPT 动画-文字渐入

    插入文字,居中对齐 选中文字,将不透明度调成100%,让文字消失不见

  4. JAVA PDF 截取N页,生成新文件,转图片,多个PDF 合并

    JAVA PDF 截取N页,生成新文件,转图片,多个PDF 合并 <dependency> <groupId>com.itextpdf</groupId> < ...

  5. 开放 LLM 排行榜: 深入研究 DROP

    最近,开放 LLM 排行榜 迎来了 3 个新成员: Winogrande.GSM8k 以及 DROP,它们都使用了 EleutherAI Harness 的原始实现.一眼望去,我们就会发现 DROP ...

  6. Visual Studio 2022 激活,安装教程,内附Visual Studio激活码、密钥

    visual studio 2022(vs 2022)是由微软官方出品的最新版本的开发工具包系列产品.它是一个完整的开发工具集,囊括了整 visual studio 2022是一款由微软全新研发推出的 ...

  7. L3-008 喊山 (30 分) (BFS)

    喊山,是人双手围在嘴边成喇叭状,对着远方高山发出"喂-喂喂-喂喂喂--"的呼唤.呼唤声通过空气的传递,回荡于深谷之间,传送到人们耳中,发出约定俗成的"讯号",达 ...

  8. 如何在 Debian 12 上安装 MariaDB

    MariaDB 是一个开源多线程的关系数据库管理系统,是 MySQL 的替代品. MariaDB 是 Debian 中 MySQL 的默认替换方案. 本教程介绍如何在 Debian 12 上安装 Ma ...

  9. S3C2440移植linux3.4.2内核之修改分区以及制作根文件系统

    上一节S3C2440移植linux3.4.2内核之内核框架介绍及简单修改我们简单配置了内核,这节来根据继续修改内核. 启动内核   内核启动的打印信息如下图所示   可以看到内核有8个分区,而我们的u ...

  10. 简单的winform学生管理系统Demo

    界面效果 练习重点 1. 关系表的创建 2. 增删改查的操作,及sqlhelper的封装 3. 跨页面数据传递,编辑页数据提交后数据局步刷新到列表数据 项目源码 FrmStuddentList pub ...