【发布时间】:2022-02-09 21:25:53
【问题描述】:
想象一个返回承诺的函数(例如从 fetch API 获取):
fetch(...)
.then((response) => {...})
.catch((error) => {...});
我如何知道catch 语句中的错误是否是由于promise 拒绝而不是then 语句中的代码引起的?
以下内容将起作用:
let success = false;
fetch(...)
.then((response) => {success = true; ...})
.catch((error) => {if(success) ...});
但我想知道是否有更好或更本土的方式来做到这一点。我也尝试过这样做:
fetch(...)
.catch((promiseError) => {...});
.then((response) => {...})
.catch((thenError) => {...});
但我认为它不起作用,因为 response 没有转发到 thenstatement(或者至少 TS 是这么说的)。
哪种方式更好?
【问题讨论】:
-
您可以查看
error.message以确定是什么原因造成的。或者您可以使用 try catch 块并等待承诺,这样您就可以分别捕获错误。最佳方法取决于您的实际目标。 -
处理此问题的一种方法是定义一个自定义错误类,并从
then方法的回调函数中抛出该自定义错误类的实例。在catch方法的回调函数中,你可以检查错误参数是否是你自定义错误类的实例。
标签: javascript promise es6-promise