jQuery Deferred's, $.when() and the fail() callback arguments

后端 未结 4 521
灰色年华
灰色年华 2020-12-01 16:08

I\'m getting an unexpected result when using $.when() when one of the deferred operations does not succeed.

Take this JavaScript, which created 2 deferr

4条回答
  •  萌比男神i
    2020-12-01 16:49

    I've faced this same problem, and I dealt with it by using the .always callback and inspecting my array of deferred objects. I had an unknown number of ajax calls, so I had to do the following:

    // array of ajax deletes
    var deletes = [];
    $checkboxes.each(function () {
        deletes.push(deleteFile(this));
    });
    
    $.when.apply($, deletes)
      .always(function () {
          // unfortunately .fail shortcircuits and returns the first fail,
          // so we have to loop the deferred objects and see what happened.
    
          $.each(deletes, function () {
              this.done(function () {
                  console.log("done");
              }).fail(function () {
                  console.log("fail");
              });
          });
      });
    

    The deleteFile method returns a promise, which has .done or .fail callbacks.

    This allows you to take action after all deferreds have completed. In my case I'm going to show a delete file error summary.

    I just tried this, and unfortunately I had to put a interval timer to check that they were all truly done after my $.each on the deferred objects. This seems odd and counterintuitive.

    Still trying to understand these deferreds!

提交回复
热议问题