在处理延迟数组时,获得成功的延迟并忽略失败的延迟

时间:2016-01-22 14:37:37

标签: javascript jquery ajax

在我的下面的代码中,如果任何延迟失败,它将进入失败阻止,一切都将丢失。我想要的是,忽略失败者并抓住成功者。有任何优雅的方式吗?如果所有延迟失败,我将如何进入失败的阻止。 一个可以解决的问题是采用for循环并逐个处理该循环中的 deferredItems 数组,但这并不是一种优雅的方式。

$.when.apply($, deferredItems).done(function(){

}).fail(function(errorObj) {

});

2 个答案:

答案 0 :(得分:1)

使用.always()

$.map([a, b], function(d) {
  $.when(d).always(function(data) {
    console.log(data)
  })
})

答案 1 :(得分:1)

您可以使用.always,然后按照建议找到已解决的

$.when.apply($, deferredItems).always(function(){
  var resolvedDeferreds = $.grep(deferredItems, function(deferred){
    return deferred.state() === 'resolved';
  });

  //do stuff with resolved deferreds
})

编辑:

事实证明这不会起作用。一旦延迟失败并且不等待剩余的挂起延期,则立即调用.always回调。看起来似乎没有办法等待一系列的deferred,所有得到解决或拒绝只使用jquery.when原样。