私は、次のジェネレータ関数を使用し、10K約束は解決して続行することがお待ちしておりますので、チャンク内の関数を実行したい:歩留まりPromise.allとジェネレータ機能()
function* processNodes(nodes, task){
let i;
let cnt = 0;
let promiseArray = new Array(10000);
let pInd = 0;
let currId;
for(i = 0; i<nodes.length; i++){
currId = nodes[i];
promiseArray[pInd++] = asyncFunc(currId, 0, task); // return a promise
cnt++;
if(cnt > 10000){
console.log("going to yield", promiseArray)
let pall = Promise.all(promiseArray);
console.log("promise all", pall);
yield pall;
console.log("return from yield"); // never get here
pInd = cnt = 0;
}
}
}
しかし、それは決してpall
が解決されているにもかかわらず、利回りから戻ってきます。
ジェネレータ機能でこれを行うことはできますか?
編集:私は、私が何をしようとしていると思います は、ブルーバードのコルーチンのようなものを実装することです:http://bluebirdjs.com/docs/api/promise.coroutine.html
EDIT2:これは私はこの関数を呼び出す方法です:
let x = processNodes(allNodes, someSimpleTask);
x.next();
で見つけることができ、使用しているパターンのhere
Aより理解し説明を見つけることができ、元のスニペットよりも少し複雑ですこの関数をテストするコードを表示できますか? 'yield'は、呼び出し元が値を消費するまで関数を停止します。 – trincot
これは 'console.log(" yield from return "); // never get here' @trincot – shinzou
私はそのコードを意味するのではなく、その関数を呼び出すメインコードです。 – trincot