在asyncawait中使用Promise.reject()来捕捉处理程序。

问题描述 投票:0回答:1

我只是想知道使用下面的代码是否是一个好的做法。

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

这里 myFun 将返回一个已解决的reject Promise,并被另一个函数捕获。我只是想知道这是否是正确的方式,或者有其他的选择吗?

javascript reactjs async-await es6-promise
1个回答
1
投票

你试图重新抛出错误,并没有达到任何目的。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
}

1
投票

你所做的是将asyncawait和Promises混合在一起. 你可以直接 throwerr 从捕获块内部。

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

在这之后,你可以在任何地方调用 myFun.

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

© www.soinside.com 2019 - 2024. All rights reserved.