更新:此问题是 jQuery 1.7 与 1.8 的结果。永远不要在 1.7 中使用 Promise,因为它们不能通过在 a 中返回 Promise 来链接。.then
。 1.8看起来他们并没有搞砸。
http://jsfiddle.net/delvarworld/28TDM/ http://jsfiddle.net/delvarworld/28TDM/
// make a promise
var deferred = $.Deferred();
promise = deferred.promise();
// return a promise, that after 1 second, is rejected
promise.then(function(){
var t = $.Deferred();
setTimeout(function() {
console.log('rejecting...');
t.reject();
}, 1000);
return t.promise();
});
// if that promise is successful, do this
promise.then(function() {
console.log('i should never be called');
})
// if it errors, do this
promise.fail(function() {
console.log('i should be called');
});
deferred.resolve();
预期:“应该叫我”
实际:“我不应该被称为”
Problem:我想链接回调,并让其中任何一个都能够打破链条并触发fail
函数,并跳过其他链式回调。我不明白为什么所有的then都被触发而fail没有被触发。
我来自 NodeJS 的 Q 库,所以我尝试了.then
第一的。但是,将其更改为.pipe
没有影响。
你没有重新定义的价值promise
, 尝试这个:
http://jsfiddle.net/28TDM/1/ http://jsfiddle.net/28TDM/1/
var deferred = $.Deferred();
promise = deferred.promise();
promise = promise.then(function(){
var t = $.Deferred();
setTimeout(function() {
console.log('rejecting...');
t.reject();
}, 1000);
return t.promise();
});
promise.then(function() {
console.log('i should never be called');
})
promise.fail(function() {
console.log('i should be called');
});
deferred.resolve();
显然它does按照您想象的方式工作,它只是没有记录https://api.jquery.com/deferred.then https://api.jquery.com/deferred.then。很酷。这是 jQuery 1.8.0 中添加的新功能,很可能他们只是没有完成更新文档。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)