编程语言
首页 > 编程语言> > javascript – 按顺序排列的多个jQuery承诺

javascript – 按顺序排列的多个jQuery承诺

作者:互联网

基本上我想要这个:

function do_ajax_calls(...){
  var d = $.Deferred();

  $.ajax(args).done(function(){

    $.ajax(args).done(function(){

      $.ajax(args).done(function(){
         d.resolve();
      });

    });

  })

  return d.promise();
}

但是ajax调用的数量取决于我传递给函数的参数,这是一个数组,因此我无法使用该代码.

该函数应返回仅在最后一次ajax调用完成时解析的promise.所以函数需要像这样调用:

 do_ajax_calls(....).done(function(){
   // here is the callback
 })

有谁知道我该怎么做?

解决方法:

承诺的原因之一是一个很大的原因是因为它们可以被链接.您可以利用此优势迭代地将其他请求链接到上一个请求的解析:

function do_ajax_calls() {
    var dfd = $.Deferred();
    var promise = dfd.promise();
    var responses = [];

    function chainRequest(url) {
        promise = promise.then(function (response) {
            responses.push(response);
            return $.ajax(url, { method: 'POST' });
        });
    }

    for (var i = 0, length = arguments.length; i < length; i++) {
        chainRequest(arguments[i]);
    }

    dfd.resolve();

    return promise.then(function (response) {
        return responses.slice(1).concat(response);
    });
}

上面的代码将返回一个最终解析为所有响应数组的promise.如果任何一个请求失败,则承诺将在第一次失败时拒绝.

JSFiddle

标签:javascript,jquery,promise,jquery-deferred
来源: https://codeday.me/bug/20190824/1708131.html