繁体   English   中英

在异步/等待捕获处理程序中使用 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将返回一个已解决/拒绝的 Promise,它将被另一个 function 捕获。我只是想知道这是正确的方法还是有其他选择?

尝试从api()重新抛出错误将一事无成。

使用async function 将导致Promise.reject(error)在抛出错误时隐式调用。

像这样写你的 function:

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

那么调用function还是会报错:

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

你正在做的是混合 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只能在异步代码块中调用

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM