在 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
}
我只是想知道使用以下代码是否是个好习惯:
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
}