码迷,mamicode.com
首页 > 编程语言 > 详细

javascript中优雅的处理async和await异常

时间:2019-09-13 10:38:58      阅读:197      评论:0      收藏:0      [点我收藏+]

标签:handler   代码   返回   error   node   出错   失败   false   bsp   

let handler = async function(needErr) {
    return new Promise((resolve, reject) => {
        if (needErr) {
            reject(new Error(‘执行失败,给出错误‘))
        } else {
            resolve(‘执行成功,没有报错‘)
        }
    })
}

let run = async function() {
    let result = await handler(false).catch();
    console.log(result);
    result = await handler(true).catch();
    console.log(result);
}

run();

输出:

执行成功,没有报错
(node:3428) UnhandledPromiseRejectionWarning: Error: 执行失败,给出错误

async函数总是返回promise实例

无论是return了Promise,
还是内部调用了await,
就算什么也没做,它也返回promise;
一个函数,只要被标记了async,那么它就返回Promise对象
所以上面的handler函数返回的是一个promise实例

如果一个 async 函数返回的是一个 reject 的 Promise,那么这个 Promise 依然会继续被 reject。

这行代码:let result = await handler(false).catch();
返回的是resolve状态的promise
result = await handler(true).catch();
返回的是reject状态的promise

await一个resolve状态的promise,无论有没有catch,都直接得到结果
await一个reject状态的promise,catch会抓住异常,返回异常结果
 

javascript中优雅的处理async和await异常

标签:handler   代码   返回   error   node   出错   失败   false   bsp   

原文地址:https://www.cnblogs.com/liulun/p/11516014.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!