我正在创建一个返回promise的资源加载器函数。该函数执行错误记录:
function load(url) {
return request(..)
.catch(function(error) {
log(error);
throw error;
});
}
该功能用于各种链:
load(a).then(function(res1) {
load(b).then(function(res2) {
// res1 + res2
});
});
我希望能够记录资源异常并在那里停止承诺链。如果我让它沉默,那么链条会导致then
,如果我再次抛出它就会被视为未处理的拒绝。
通过节点process
全局捕获这些不是一个选项,因为平台上的其他库可能依赖于它。
可以拒绝拒绝并仍然阻止履行链继续吗?
答案 0 :(得分:0)
标准的ES6承诺只有三个结果:
一旦解决或拒绝,就没有ECMAScript标准方法告诉它不要调用任何处理程序。
有些第三方承诺库支持.abort()
方法或.cancel()
方法。例如,Bluebird 3.x有一个.cancel()
方法可以停止链,而不会为该承诺调用.then()
个处理程序。
使用标准promises处理此问题的常用方法是创建一个已知已解决或已拒绝的状态,指示链不应继续,然后您必须让立即链接的.then()
处理程序可以检查具体国家。您可以想象,通过添加.cancel()
方法并覆盖.cancel()
和.then()
来检查取消状态的承诺,然后再调用处理程序,可以为标准承诺添加.catch()
功能。< / p>