如何正确编写Node.Js中的以下循环集,而不会阻塞事件循环或不会导致内存不足错误。
到目前为止,我所尝试的内容包括
代码。
for(var i = 0; i < 2000; i++)
for(var j = 0; i < 2000; j++)
for(var k = 0; k < 2000; k++)
console.log(i + ":" + j + ":" + k);
还创建了一个JSFiddle来玩here
答案 0 :(得分:1)
不确定您的用例是什么。 Javascript是阻塞的,因为它是单线程的,它必须在转移到其他东西之前运行循环。
例如,您可以使用生成器在事件上运行每次迭代。
function* ticker() {
for(let i = 0; i < 10; i++)
for(let j = 0; i < 10; j++)
for(let k = 0; k < 10; k++)
yield[i, j, k];
}
const gen = ticker();
setInterval(() => console.log(gen.next().value), 500);
console.log('I am at the end (called straight away)');
答案 1 :(得分:1)
您需要合并setImmediate
/ setTimeout
/ etc。使用async.js库。 async.each
仅用于编排,它本身并不提供任何异步。
function getPerm(reducedWordList, callback) {
var sevenLtrWords = _.filter(reducedWordList, word => word.length == 7);
var fourLtrWords = _.filter(reducedWordList, word => word.length == 4);
async.each(sevenLtrWords, (i, cb) => {
async.each(sevenLtrWords, (j, cb) => {
async.each(fourLtrWords, (k, cb) => {
console.log(i + " " + j + " " + k);
setTimeout(cb, 0);
}, cb);
}, cb);
}, callback);
}