我收到一个动态异步请求(对于我使用ajax的jsfiddle),无论成功还是失败,我都需要等待,这意味着即使某些请求失败,我只需要知道所有进程都已完成。
//动态:在我的例子中,这是由 ajax 请求生成的,因此后续异步请求的数量是灵活的
所以我最初使用了这段代码:
$.when.apply($,deferreds).done(function() {
$("div").append("<p>All done!</p>");
}).fail(function(){
$("div").append("<p>Something failed!</p>");
});
但如果其中一个延迟失败,则会立即调用失败回调。我尝试将其更改为 always()但结果是:
未捕获类型错误:对象#没有“始终”方法
那么我如何为此实现一个always()类型的解决方案呢?
我的原始来源:jQuery Deferred - waiting for multiple AJAX requests to finish
最佳答案
如果您只想等待 $.Deferred
列表结束,无论它们是 rejected
还是 resolved
,您可以在我在你的原始来源中的回答jQuery Deferred - waiting for multiple AJAX requests to finish :
$.when.apply($, $.map(deferreds, function(d) {
var wrapDeferred = $.Deferred();
// you can add .done and .fail if you want to keep track of each results individualy
d.always(function() { wrapDeferred.resolve(); });
return wrapDeferred.promise();
}));
关于jQuery Deferred - 等待动态异步请求完成所有请求,即使某些请求失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14846340/