微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐