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

  • 2019 年 10 月 8 日
  • 筆記

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会抓住异常,返回异常结果