JavaScript顺序异步函数调用

JavaScript顺序异步函数调用,javascript,ajax,asynchronous,promise,jquery-deferred,Javascript,Ajax,Asynchronous,Promise,Jquery Deferred,我有一个函数数组,可以异步生成一些逻辑(例如ajax调用)。函数看起来如何,它将从数组中顺序调用函数 var saveHandlers = []; saveHandlers.push(function () { var deferred = $.Deferred(); setTimeout(function() { deferred.resolve(); }, 2000); return deferred.promise(); }); saveHand

我有一个函数数组,可以异步生成一些逻辑(例如ajax调用)。函数看起来如何,它将从数组中顺序调用函数

var saveHandlers = [];

saveHandlers.push(function () {
   var deferred = $.Deferred();

   setTimeout(function() {
      deferred.resolve();
   }, 2000);

   return deferred.promise();
});

saveHandlers.push(function () {
   var deferred = $.Deferred();

   setTimeout(function() {
      deferred.resolve();
   }, 2000);

   return deferred.promise();
});

$(function () {
    var $form = $('#form');

    $form
       .unbind('submit')
       .submit(function (e) {
          if (saveHandlers.length > 0) {
              $.when.apply(null, saveHandlers);
          }
          e.preventDefault();
       });
});

编写一个调用异步函数并将数组索引作为参数的函数

在异步函数的回调中,递增索引,然后(如果尚未到达数组末尾)使用新索引递归调用函数

var foo = [fun_a, fun_b, fun_c];

function bar(index) {
    index = index || 0;

    function callback() {
        if (foo[++index]) {
           bar(index);
        }
    };

    foo[index]().then(callback);
}

请阅读并向我们展示您的尝试。所以我们可以从这里开始讨论这个问题。@Archer让我们假设一个数组由承诺组成,但它的长度是动态的。主函数是什么样子?@Andrea我加了一个例子。