2016-04-15 25 views
0

だから私はretuner Promise関数で単純なループを持っています。これは次のようになります:何とかPromisesで同期ループを実行できますか?

最初の機能が終了し、次の要素に繰り返されるまで何とかして待つことができますか?

P.S. 約束を使用する必要はありません。

+2

てみグーグル滝"。これはあなたがここで欲しいものでなければなりません。 (申し訳ありませんが、現在完全な回答を作成する時間がありません) – Sirko

+0

サードパーティのライブラリを使用しないで行う方法については、こちらをご覧ください:https://remysharp.com/2015/12/18/promise-waterfall –

答えて

0

既に約束を使用している場合は、どうぞお試しください。最高のPromiseモジュール、Bluebirdには、配列全体を繰り返し実行するように設計されたヘルパー関数があり、実行を制御する約束:http://bluebirdjs.com/docs/api/promise.mapseries.htmlがあります。あなたはこのようにそれを使用します。

Promise.mapSeries(categories, function(category) { 
    // Parse the category, and return a value or a promise. 
}); 

parseCategoryは別の場所で定義された関数であるならば、あなたはもっと簡単に得ることができます。

Promise.mapSeries(categories, parseCategory); 

並列に呼び出しを実行map姉妹機能もあります。で

0

待つ/非同期あなたはかなり簡単にそれを行うことができると思いサポート:

async function parseCategories (categories) { 
    for (var i = 0; i < categories.length; i++) { 
    await parseCategory(categories[i]) 
    } 
} 
1

ライブラリなしES6でそれをしたい場合:「約束のため

var parseCategoryPromise = Promise.resolve(); 
for (var i = 0; i < categories.length; i++) { 
    (function(i){ 
    parseCategoryPromise = parseCategoryPromise.then(function(){ 
     return parseCategory(categories[i]) 
    }); 
    })(i) 
} 
関連する問題