私はこのようなエンドポイントと興亜のWebサーバーを持っていると仮定すると:すべてのアクションが明らかに実行された後Generator関数を並列で実行するには?
const perform = require(...); // some generator function
exports.endpoint = function*() {
var results = yield getResults();
// Respond the results
this.body = results;
}
exports.getResults = function*() {
var actions = [...];
var results = [];
for (var action of actions) {
var result = yield perform(action);
results.push(results);
}
return results;
}
今すぐクライアントが応答を取得します。しかし、物事は、それぞれのアクションは、前の完了に依存しています。
これを並列実行する方法はありますか?
注:私は何とか結果を返して解決できない限り、それらを約束にすることは選択肢ではありません。
問題は 'perform(action)'は中断されたGeneratorを返し、実際の 'perform()'を実行しません。私が信じているKoa(またはBluebird.coroutine)が実際にこの関数を実行すると、 –
実際にperform関数を実行するには 'co'libを使うことができますが、この解決法は意味がありますか? '戻り収率Promise.all(actions.map(機能(作用){ \t \t戻りCO(関数*(){ \t \t \tリターン収率(アクション)を行う。 \t \tを} \t}))。 ' –
@ ShaiBen-Dorはい、それは理にかなっています、' co'はそのようなものには非常に適しています。また、Bluebirdの 'co'wrap'(' co'モジュールの一部)とコルーチンを使うこともできます。 http://bluebirdjs.com/docs/api/promise.coroutine.html – rsp