이 같은 엔드 포인트와 코아 웹 서버가 가정 : 모든 작업 분명히 수행 한 후생성기 함수를 병렬로 실행하는 방법?
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;
}
지금 클라이언트가 응답을 얻을 것이다. 그러나 각각의 행동은 이전의 완성에 달려 있습니다.
병렬로 실행할 수 있습니까?
참고 : 어떻게 든 결과를 반환하고 resolve() 할 수없는 한 약속을 사용하도록 설정할 수 없습니다.
문제는'perform (action)'은 일시 중지 된 Generator를 반환하고 실제'perform()'을 실행하지 않습니다. 굴복했을 때 Koa (또는 Bluebird.coroutine)는 실제로 함수를 실행합니다. –
perform 함수를 실제로 실행하려면'co'lib를 사용할 수 있습니다.이 해결책이 맞습니까? '복귀 수율 Promise.all (actions.map (기능 (동작) { \t \t 복귀 공동 (함수 *() { \t \t \t 복귀 수율 (액션)을 수행; \t \t}를 \t})); ' –
@ ShaiBen-Dor 네, 그렇습니다. 'co'는 그런 것들에 아주 좋습니다. 여러분은 Bluebird의'co'wrap' ('co' 모듈의 일부)와 coroutine을 사용할 수도 있습니다. http://bluebirdjs.com/docs/api/promise.coroutine.html – rsp