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会抓住异常,返回异常结果
来源:https://www.cnblogs.com/liulun/p/11516014.html