【问题标题】:JavaScript sequential async function callsJavaScript 顺序异步函数调用
【发布时间】:2017-02-07 13:33:29
【问题描述】:

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

【问题讨论】:

标签: javascript ajax asynchronous promise jquery-deferred


【解决方案1】:

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

在异步函数的回调中,增加索引并(如果您没有到达数组末尾)使用新索引递归调用该函数。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-24
    • 2012-02-25
    • 2021-08-11
    • 1970-01-01
    • 2022-12-04
    相关资源
    最近更新 更多