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



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

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

在这里,myFun将返回一个已解决/拒绝的承诺,该承诺将被另一个函数捕获。我只是想知道这是正确的方式还是有其他选择?

尝试从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
}

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

最新更新