cam*_*ari 10 javascript jquery deferred
有没有办法取消正在进行的延迟回调队列?我有一个任意数量的ajax调用.当成功数据返回特定标记时,我想停止进一步的ajax请求:
this.oDeferred=$.Deferred();
this.oChain=this.oDeferred;
for(var i=0; i<this.aKey.length; i++) {
(function(iKey,self) {
self.oChain=self.oChain.then(function(){
return $.ajax({
url:self.aUrl[iKey],
type:'post',
data:{'ajax':true},
dataType:'json',
success:function(data) {
if(data.bCancel==true) {
//stop deferred object here!
}
}
});
})
}(this.aKey[i],this))
}
this.oDeferred.done(function() {
console.log('done')
});
this.oDeferred.resolve()
Run Code Online (Sandbox Code Playgroud)
顺便说一句 - 在完成所有ajax请求后,函数done()将被自动触发.所有ajax请求完成后如何执行函数?
先感谢您!
答案是肯定的.有两种方法可行.
该.then()方法返回一个新的promise,其状态由传递给方法的处理程序返回的内容确定.
因此,通过从.then()处理程序返回从未解析且永不拒绝的promise,可以有效地取消Deferred/promise回调队列.这样的承诺可以从.then()处理程序的done处理程序(第一个参数)或其失败处理程序(第二个参数)中进行.同样不能达到.done(),.fail()或者.always()方法,其返回原递延/承诺不加修饰.
一个内抛出未被捕获的错误.then(),.done(),.fail(),.always()或.progress()处理程序将被杀死在它运行的事件线程杀死的方法链.
例如,可以故意抛出错误throw('deliberate error').
应该注意,两种方法都只能抑制链式方法处理程序(或通过赋值实现的等价物).
无论采用哪种方法,任何已在抑制返回/错误表达式执行时启动的异步进程都将继续,并且任何相应的已完成/失败/始终/进度处理程序可能已触发.
| 归档时间: |
|
| 查看次数: |
4283 次 |
| 最近记录: |