Promise.allSettled为何将apiRequest内catch的错误判定为fulfilled状态
问题原因
- 你在
apiRequest的catch捕获块中直接使用return返回错误提示字符串。对于async函数来说,只要执行了正常的return操作,无论返回的内容是成功结果还是错误描述,函数返回的Promise实例状态都会被标记为fulfilled,相当于你主动吞掉了请求错误,自然Promise.allSettled无法识别到rejected状态的请求。
修复方案
只需修改apiRequest的catch块逻辑,不要返回错误信息,改为抛出错误即可,修改后的代码如下:
async function apiRequest(url, index) { try { const { data } = await axios('https://api-end-point') return 'All good' + url } catch (error) { const status = error.response?.status ?? 'No response' // 抛出错误使Promise状态变为rejected throw new Error(`Error: ${status}, ${url}`) } }
如果业务需要保留原错误对象的额外信息,也可以直接抛出原error,或者将自定义错误信息与原error合并后抛出,不影响Promise.allSettled对rejected状态的识别。
内容的提问来源于stack exchange,提问作者Álvaro
相关产品推荐
相关产品推荐

