在 async/await 捕获处理程序中使用 Promise.reject()

Using Promise.reject() in async/await catch handler

我只是想知道使用以下代码是否是个好习惯:

   const myFun = async () => {
     try {
         const response = await api();
         if(response.status === 200) {
            return response.data;
         }
      } catch(err) {
         return Promise.reject(err);
      }
   }

这里 myFun 将 return 一个 resolved/reject Promise,它将被另一个函数捕获。我只是想知道这是正确的方法还是有其他选择?

您正在做的是混合 async/await 和 Promises。您可以从 catch 块中 throw err

const myFun = async () => {
     try {
         const response = await api();
         if(response.status === 200) {
            return response.data;
         }
      } catch(err) {
         throw err;
      }
   }

在此之后,您可以在任何调用 myFun 的地方捕获错误。

两种情况的最终结果是一样的。唯一的区别是 throw 可以在 JS 代码的任何地方使用,而 Promise.reject 只能从异步代码块中调用 only

您尝试重新抛出 api() 中的错误没有任何结果。

使用 async 函数将导致 Promise.reject(error) 在无论如何抛出错误时被隐式调用。

像这样写你的函数:

const myFun = async () => {
     const response = await api();
     if (response.status === 200) {
          return response.data;
     }
     // You might want to return something else here
}

那么调用函数仍然会收到错误:

try {
    await myFun();
} catch (error) {
    // error still received
}