【发布时间】:2017-08-06 23:17:53
【问题描述】:
我有一个可以解决或拒绝的承诺。我想在这些情况下做一些具体的事情,然后继续解决承诺链(基本上我想“抓住”被拒绝的承诺,做一些事情,然后继续解决)。
这是一个功能性的 sn-p,它显示了我遇到的问题:
var def = $.Deferred();
def.then(
function() {
console.log('first success handler');
},
function() {
console.log('first fail handler');
return $.Deferred().resolve();
}
);
def.then(
function() {
console.log('second success handler');
},
function() {
console.log('second fail handler');
}
);
def.done(function() {
console.log('done handler');
});
def.reject();
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
预期结果:
first fail handler
second success handler
done handler
当前结果:
first fail handler
second fail handler
根据 jQuery 文档:
从 jQuery 1.8 开始,deferred.then() 方法返回一个新的 Promise 可以过滤通过 a deferred 的状态和值 功能[...]。这些过滤器函数可以返回一个新值 传递给 promise 的 .done() 或 .fail() 回调,或者它们 可以返回另一个可观察对象(Deferred、Promise 等) 将其已解决/拒绝的状态和值传递给承诺的 回调。
所以我不知道为什么这不起作用。我希望第一个失败处理程序中返回的已解决承诺允许承诺链的其余部分继续解决。
【问题讨论】:
-
这是一个已知的错误。见:stackoverflow.com/questions/31962655/…
标签: javascript jquery promise jquery-deferred deferred