2017-01-24 17 views
0

this questionのOPと同様に、私はforというループを実行して、すべてのアクションが完了したら何かをしたいと思います。配列がない場合の非同期の "for"ループ

回答を確認しましたが、asyncライブラリですが、すべて解決策には配列の反復処理が含まれています。私は配列の "forEach"要素を何もしたくないので、配列はありません。

n回だけ操作したい場合はどうすればよいですか?たとえば、n個のランダムなエントリをデータベースに挿入し、その後何かしたいとしますか?今のところ、私は次のようなものに悩まされています:

本当に恐ろしいです。私は非同期のためにシンプルなものを見つけることができません、あなたはこれをどのようにしましたか?

答えて

2

バージョン4.0以降、node.jsにライブラリなしでサポートされているPromisesを使用できます。

insertRandomEntryのコールバック関数にパラメータがある場合は、resolveに渡すことができます。 thenに与えられた関数では、resolveに与えられたパラメータの配列を受け取ります。

function insertMultipleRandomEntries(n_entries,callback){ 
 
    var promises = []; 
 
    for(var i=0;i<n_entries;i++) { 
 
     promises.push(new Promise(function (resolve, reject) { 
 
      insertRandomEntry(function (val) { 
 
      thingDoneEachTime(val); 
 
      resolve(val); 
 
      }); 
 
     })); 
 
    } 
 
    
 
    Promise.all(promises).then(function (vals) { 
 
     // vals is an array of values given to individual resolve calls 
 
     thingDoneAtTheEnd(); 
 
     callback(); 
 
    }); 
 
}

+0

感謝。私の例では 'console.log'しか書いていないので、それは重要ではないように見えましたが、そうではありません。私は質問を編集しました。どこに行くの?私は 'insertRandomEntry'からコールバックが必要です、' resolve'に取って代わるのか、それとも後に行くのですか?もし私ができれば、最後に何かしたいと思う。もしそれが大したことでないなら、私はコールバックをキャッチした後でもそれをやりなおすことができますが、それは関数の中でより意味をなさないものです。 –

+0

私はポストを更新して、約束を解決する前に追加の関数を呼び出す方法と、個々の約束の価値結果を収集する方法を示しました。 – marinabilles

関連する問題