簡體   English   中英

在node.js中編寫嵌套的非阻塞循環

[英]Writing nested non-blocking loops in node.js

如何在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在這里

不太確定您的用例是什么。 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)');

您需要結合使用setImmediate / setTimeout / setImmediate 使用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);
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM