And*_*Ray 12 jquery promise chain deferred
更新:此问题是jQuery 1.7 vs 1.8的结果.不要在1.7中使用承诺,因为它们不能在一个承诺内部回复.then.1.8看起来他们没有弄乱它.
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();
Run Code Online (Sandbox Code Playgroud)
预期:'我应该被称为'
实际:'我永远不应该被称为'
问题:我想链接回调并让其中任何一个能够打破链并触发该fail函数,并跳过其他链式回调.我不明白为什么所有的游戏都被触发并且未触发失败.
我来自NodeJS的Q库,所以我先尝试了.then.但是,将其更改为.pipe无效.
use*_*654 11
你没有重新定义它的价值promise,试试这个:
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();
Run Code Online (Sandbox Code Playgroud)
显然它确实以你认为的方式工作,它只是没有记录 https://api.jquery.com/deferred.then.很酷.这是jQuery 1.8.0中添加的新功能,很可能他们没有完成更新文档.