【问题标题】:Is there a way to continue after one deferred fails?有没有办法在一个延迟失败后继续?
【发布时间】:2016-06-17 10:42:25
【问题描述】:

我正在处理未知数量的 ajax 请求。请求可能会在 404 中失败。这会导致整个链失败。

有没有办法在一个延迟失败后继续?

var deferreds = [];
// fill deferreds with a number of ajax requests.
$.when.apply($, deferreds)
 .done(function(){
     // handle done
 }).fail(function(){
     // handle fail
     // would like to fix/resolve the failed deferred and continue with the rest
 });

【问题讨论】:

  • 不是 $.when,当一个失败时,他们都失败了。不过,您可以创建自己的延迟对象。

标签: javascript jquery ajax jquery-deferred


【解决方案1】:

您必须创建自己的延迟对象,等待其他延迟对象成功或失败。

var myDeferred = $.Deferred();
var origDeferred = $.ajax(...);
// if request is ok, i resolve my deferred
origDeferred.done(function() {
  myDeferred.resolve.apply(this, arguments);
});
// if request failed, i also resolve my deferred
origDeferred.fail(function() {
  myDeferred.resolve.apply(this, arguments);
});

在这种情况下,您的延期将始终得到解决。

【讨论】:

    【解决方案2】:

    这样做怎么样!

    var defArr = []; // Array of Deferreds
    
    var recur = function(){
      $.when.apply($, defArr).done(function(){
        // Only do what event, when all are done, fail or resolved
        $.get("/media.php?i=done");
      }).fail(function(oDef){
        // Remove fail def from defArr
        defArr.splice(defArr.indexOf(oDef), 1)
        // do it again with all defArr into $.when
        recur();
      });
    }
    
    recur();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-02-23
      • 1970-01-01
      • 2016-11-13
      • 1970-01-01
      • 2016-02-17
      • 2011-06-20
      • 1970-01-01
      相关资源
      最近更新 更多