如何使用async/await捕获抛出的错误
How do I catch thrown errors with async / await?
下面是一些代码:
import 'babel-polyfill'
async function helloWorld () {
throw new Error ('hi')
}
helloWorld()
我也深入尝试了这个:
import 'babel-polyfill'
async function helloWorld () {
throw new Error ('hi')
}
async function main () {
try {
await helloWorld()
} catch (e) {
throw e
}
}
main()
和:
import 'babel-polyfill'
async function helloWorld () {
throw new Error ('hi')
}
try {
helloWorld()
} catch (e) {
throw e
}
这项工作:
import 'babel-polyfill'
async function helloWorld () {
throw new Error('xxx')
}
helloWorld()
.catch(console.log.bind(console))
async
用于Promises。如果您拒绝promise,那么您可以catch
错误,如果您解决了promise,则该错误将成为函数的返回值。
async function helloWorld () {
return new Promise(function(resolve, reject){
reject('error')
});
}
try {
await helloWorld();
} catch (e) {
console.log('Error occurred', e);
}
所以这有点棘手,但您没有捕捉到错误的原因是,在顶层,整个脚本可以被视为同步函数。任何想要异步捕获的内容都需要封装在async
函数中或使用Promises。
例如,这将吞噬错误:
async function doIt() {
throw new Error('fail');
}
doIt();
因为它和这个一样:
function doIt() {
return Promise.resolve().then(function () {
throw new Error('fail');
});
}
doIt();
在顶层,您应该始终添加一个普通的Promise风格的catch(),以确保您的错误得到处理:
async function doIt() {
throw new Error('fail');
}
doIt().catch(console.error.bind(console));
在Node中,进程上还有全局unhandledRejection
事件,您可以使用它来捕获所有Promise错误。
要从异步函数中捕获错误,可以等待错误:
async function helloWorld () {
//THROW AN ERROR FROM AN ASYNC FUNCTION
throw new Error('hi')
}
async function main() {
try {
await helloWorld()
} catch(e) {
//AWAIT THE ERROR WITHIN AN ASYNC FUNCTION
const error = await e
console.log(error)
}
}
main()
或者,您可以等待错误消息:
async function main() {
try {
await helloWorld()
} catch(e) {
//AWAIT JUST THE ERROR MESSAGE
const message = await e.message
console.log(message)
}
}
相关文章:
- 为什么我得到“;未捕获类型错误”;使用Flexslider时
- 我是否错误地使用了jQuery .each函数
- 避免使用神秘的javascript"脚本错误”;使用cdn
- 不断获得"未捕获的类型错误:无法使用'在'操作员搜索'191'"jQu
- Symfony2 JSON 对象 - 错误未捕获类型错误:无法使用“in”运算符搜索“636”
- history.pushState 错误,使用 fancybox “无法在'历史'上执行'pus
- 为什么我会收到错误:未捕获的类型错误:无法使用此代码读取 null 的属性“top”
- 错误地使用 JSF ajax 调用
- 获取未捕获的类型错误:无法使用“in”运算符搜索“length”in
- 未捕获的类型错误:无法使用 Nude.js读取 Null 的属性“width”
- 我收到一个错误:类型错误:在使用解析 API 更新用户对象时未定义 e.changes.如何解决这个问题
- jQuery:在成功/错误中使用延迟对象(ajaxSetup 选项)
- 我是否错误地使用了requireJS,或者我下载的库存在严重错误
- 类型错误:无法使用“in”运算符在 [{}] 中搜索“_id”
- 角度类型提前异步结果 - 收到错误“类型错误:无法使用'in'运算符搜索 ..在..".
- 许多画布对象会导致“无效状态错误:尝试使用不可用或不再可用的对象”
- 使用闭包编译器时出现非法字符错误.jar使用 ANT 进行 r.js 优化
- 未捕获的类型错误:无法使用“in”运算符在 false 中搜索“长度”
- TypeScript错误无法使用'在'操作员搜索'_id'用于typescript和pou
- 使用谷歌地图进行地理编码,没有OVER_QUERY_LMIT错误-尝试使用PHP解决方案