TL; DR: 您 可以
将拒绝用于控制流,但通常,它们仅用于特殊情况
在Promise版本中,如果请求返回404,它将立即以.catch()结尾,对吗?
是。
如果data.IsSuccessful == false,那么它也将以.catch()结尾?
是。
我不在任何地方打电话给我解决或拒绝,这有问题吗?
一点也不。您没有使用
Promise构造函数(不需要,因为您已经有了对ajax结果的承诺)。
如果我想以不同的方式对待这两种失败,该怎么办?
引发各种错误,以便您可以区分它们。给它们命名,添加特殊属性,进行子类化(尤其是在ES6中),或仅查看消息。
承诺,如果从.then()内部,我想做类似的事情,我一直认为我应该做的是抛出一个错误,而不是
不必要。您可以做与不做承诺时完全相同的操作-在回调中添加if-else(如果愿意,可以在返回时返回if)。
在控制流及其结果值方面,
.then(function(res) { if (!res.isOK) { // do something return false; } // do something else}).catch(function(err) { // handle something})和
.then(function(res) { if (!res.isOK) throw new MyError(res); // do something else}).catch(function(err) { if (err instanceof MyError) { // do something return false; } // handle something})几乎是等效的(除了
dosomething此throw之外
MyError的代码中的异常以及带有此类异常的代码)。主要区别在于何时要
.then(…)在
then和之间链接其他调用
catch。如果不这样做,请选择更喜欢的选项。



