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

Get successful defers and ignore failed ones while processing array of defers

本文关键字:延迟 失败 获取 处理 数组 成功      更新时间:2023-09-26

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

$.when.apply($, deferredItems).done(function(){
}).fail(function(errorObj) {
});

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

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

编辑:

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

使用.always()

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