2016-04-25 5 views
-1

私の現在の作業の状況に直面しています。私は私がしたい私はちょうどそのような各ループで非同期呼び出しを完了して次へ進むノードjs

としての機能を行うための最善のパッテンを知りたい

私のコードは、この

for(var i =0 ;i < collection.length; i++){ 
    asynCall(collection[i],function(){....})//doing a asynchronous call 
} 

のようなもので、このシナリオで作業するための最良のパターンを知りたいです次に行き、それを完了、

    iに対する
  • = 0の非同期機能を行う、一度にそれぞれの非同期呼び出しを完了し、次のレコードを取りますI = 1は、非同期関数を行い、それを完了、次の

に行くというように、各反復で「私は」私は、非同期呼び出しを完了したいをして完了した後、それが唯一の次を取るための0

  • レコード

    この方法で機能を実行する方法はありますか。またはそれを行うには、他の方法がある私に

    を助けるかもしれNPM内の任意のモジュールがある最も単純なアプローチは、非同期制御フローを管理し、ライブラリを使用することです最適なソリューション

  • 答えて

    0

    で私を導いてください、 async.jsのように。

    async.seriesを使用して、非同期機能を1つずつ呼び出すことができます。

    また、単純なものを維持したい場合は、単純な古い再帰を使用できます。

    var i = 0; 
    (function loop() { 
        asynCall(collection[i], function() { 
        if (++i < collection.length) loop(); 
        }); 
    }()); 
    

    あなたが本当にループ内で呼び出し非同期機能を順次にしたい場合は、それはasync/awaitでも可能です。

    function wrapInPromise(x) { 
        return new Promise(function (resolve) { 
        asynCall(x, resolve); 
        }); 
    } 
    
    var collection = ['a', 'b', 'c']; 
    
    async function doAsyncStuff() { 
        for (var i = 0; i < collection.length; i += 1) { 
        await (wrapInPromise(collection[i])); 
        } 
    } 
    
    doAsyncStuff(); 
    

    実際にはこれを動作させるには、some effortが必要です。

    +0

    大丈夫,,感謝の男、しかし、単に好奇心のために私が知りたい、私はループ – Krishna

    +0

    うんために内部で非同期シリーズの方法を動作することができますどのような方法があり、それは実行可能です。私は私の答えを更新しました。 –

    2

    async.js eachSeriesを使用して:....

    async.eachSeries(collection, function(collectionItem, callback) { 
        asynCall(collectionItem, callback); 
    }, function(err){ 
        //Handle errors here 
    }); 
    
    関連する問題