【问题标题】:Get successful defers and ignore failed ones while processing array of defers [duplicate]在处理延迟数组时获得成功的延迟并忽略失败的延迟[重复]
【发布时间】:2016-01-22 23:34:39
【问题描述】:

在我下面的代码中,如果任何延迟失败,它将进入失败块并且一切都丢失了。我在这里想要的是,忽略失败的并抓住成功的。有什么优雅的方法吗?如果所有延迟都失败了,我将如何进入失败的区块。 一种解决方法可能是采用 for 循环并在该循环中逐一处理 deferredItems 数组,但这不是一种优雅的方式。

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

}).fail(function(errorObj) {

});

【问题讨论】:

  • jQuery 没有内置任何东西,如果一个 deferred 失败了,$.when 也一样,这就是它的设计方式

标签: javascript jquery ajax


【解决方案1】:

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

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

  //do stuff with resolved deferreds
})

编辑:

事实证明这是行不通的。一旦一个延迟失败,.always 回调就会立即被调用,并且不会等待剩余的未决延迟。看起来没有办法等待延迟数组全部被解决或拒绝使用 jquery.when 原样。

【讨论】:

  • 如果所有延迟都失败了,我需要去失败块,如果我没有得到任何解决,我是否可以切换到失败块。?
【解决方案2】:

使用.always()

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

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-05-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多