0
我想运行在块了一项功能,它会等待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
已解决,也会从收益中返回。
是否有可能使用generator函数做这样的事情?
编辑: 我想我正在试图做的是要实现像蓝鸟的协同程序:http://bluebirdjs.com/docs/api/promise.coroutine.html
EDIT2:这是我如何调用该函数:
let x = processNodes(allNodes, someSimpleTask);
x.next();
发现原来片段更复杂你能展示你测试这个函数的代码吗? 'yield'将暂停函数,直到调用者使用该值。 – trincot
这个:'console.log(“return from yield”); //永远不会到达这里@trincot – shinzou
我不是指那个代码,而是调用这个函数的主代码。 – trincot