2017-02-07 18 views
-3

私はいくつかのロジックを非同期的に(例えば、ajax呼び出し)行う一連の関数を持っています。どのように配列の関数を順番に呼び出す関数のように見えるのですか?JavaScriptシーケンシャル非同期関数呼び出し

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(); 
     }); 
}); 
+0

https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Promise – Archer

+1

、お読みください[、最小完全、かつ検証例を作成する方法](のhttp:/ /stackoverflow.com/help/mcve)、あなたが試したことを私たちに示してください。だから私たちはその問題から話し合うことができます。 – Andrea

+0

@Archer配列は** Promises **で構成されていますが、長さは動的です。どのような主な機能はどのように見える? –

答えて

0

async関数を呼び出し、配列インデックスを引数として取る関数を記述します。

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); 
} 
関連する問題