在我的代码中,如果任何延迟失败,它会进入失败块并且一切都会丢失。我想要的是,忽略失败的成功者。任何优雅的方式来做到这一点?如果所有推迟失败,我将如何去失败的块。 一个解决方法可能是采取一个for循环,并逐个处理deferredItems数组,但这并不是优雅的方式。在处理延迟数组的同时获得成功的延迟并忽略失败的代码
$.when.apply($, deferredItems).done(function(){
}).fail(function(errorObj) {
});
在我的代码中,如果任何延迟失败,它会进入失败块并且一切都会丢失。我想要的是,忽略失败的成功者。任何优雅的方式来做到这一点?如果所有推迟失败,我将如何去失败的块。 一个解决方法可能是采取一个for循环,并逐个处理deferredItems数组,但这并不是优雅的方式。在处理延迟数组的同时获得成功的延迟并忽略失败的代码
$.when.apply($, deferredItems).done(function(){
}).fail(function(errorObj) {
});
可以使用。总是,然后找到其被解决的,如你所说
$.when.apply($, deferredItems).always(function(){
var resolvedDeferreds = $.grep(deferredItems, function(deferred){
return deferred.state() === 'resolved';
});
//do stuff with resolved deferreds
})
编辑:
原来这是行不通的。一旦延迟失败并且不等待剩余的待决延期,立即调用.always
回调。看起来像没有办法等待一系列的被攻击者全部得到解决或仅仅使用jquery.when原样被拒绝。
如果所有推迟失败,我需要去失败块,有无论如何,我可以切换到失败块,如果我没有得到任何解决。? – Ahmad
使用.always()
$.map([a, b], function(d) {
$.when(d).always(function(data) {
console.log(data)
})
})
jsfiddle https://jsfiddle.net/2y49xo17/,https://jsfiddle.net/2y49xo17/1/ – guest271314
,如果所有推迟失败,我需要去失败块,有无论如何,我可以切换到失败块,如果我没有得到任何解决。 – Ahmad
@Ahmad在'.always()中尝试使用'if..else' https://jsfiddle.net/2y49xo17/2/ – guest271314
没有什么内置到jQuery中,如果一个延迟失败,'$ .when'也如此,这就是它的设计方式 – adeneo