我不确定我是否正确理解了承诺的某个方面,而且在短暂的Google / SO搜索后我无法找到我想要的内容。
一个已解决的承诺是否可以返回到被拒绝的回调,以后会在链中触发一个已解决的方法?使用jQuery deferreds
(以及它已被弃用的pipe
方法)作为示例:
x = $.Deferred();
x
.then(null,function() {
return $.Deferred().resolve();
})
.then(function() {
console.log('resolved');
},function() {
console.log('rejected');
});
上面的代码,日志rejected
,我希望它能够记录resolved
,因为第一个错误回调中的Deferred
会返回已解析的promise
。
相反,使用jQuery
已弃用pipe
方法日志的相同代码,正如我预期的那样resolved
。
x = $.Deferred();
x
.pipe(null,function() {
return $.Deferred().resolve();
})
.pipe(function() {
console.log('resolved');
},function() {
console.log('rejected');
});
我是否在尝试解决拒绝回调中的承诺时想到了什么问题?
答案 0 :(得分:1)
对于任何遇到过同样思考过程的人,以下页面帮助了我:https://gist.github.com/domenic/3889970
具体来说:
...你可以将一个函数的返回值直接输入到另一个函数中, 并继续无限期地这样做。更重要的是,如果在任何时候 该过程失败,组合链中的一个函数可以抛出一个 异常,然后绕过所有其他组成层,直到 它掌握在可以用捕获物处理它的人手中。
似乎jQuery的管道方法违反了Promise的规范。