JavaScript顺序异步函数调用

时间:2017-02-07 13:33:30

标签: javascript ajax asynchronous promise jquery-deferred

我有一组函数,它们异步地生成一些逻辑(例如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();
       });
});

1 个答案:

答案 0 :(得分:0)

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

在async函数的回调中,递增索引并且(如果你还没到达数组末尾)用新索引递归调用函数。

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);
}