2014-09-24 55 views
0

所以,我有一個三個對象的數組。他們有一個名字和一個類型屬性(和其他各種屬性)。我想遍歷每個模塊,並使用readline模塊獲取用戶輸入。下面是我用它來做到這一點(使用async模塊)的JavaScript代碼:異步的每個都立即打印出所有元素

async.each(questions.q, function (e, cb) { 
    if (e.type === "s") { 
    //not important 
    } else if (e.type === "q") { 
    rl.question(e.name, function (a) { 
     //do stuff 
     cb(); 
    }); 
    } 
}, function (err) { 
    if (err) throw err; 
}); 

question.q是元素的數組)

然而,輸出爲我的三個對象與typeq是以下內容:

Question1Question2Question3 //input 

不是一次做一個的,each打印所有3出來,然後等待輸入。爲什麼會這樣,我該如何解決它?

+0

聽起來像你不應該異步運行這些,如果你不想這種行爲,但我想你可以很容易地用一個數字變量模擬一個鎖定機制,如果你想保持代碼使用異步。 – ShaneQful 2014-09-24 21:47:44

+0

@ShaneQful我認爲以異步方式運行這些是正確的做法嗎?它等到東西已經完成,然後轉向下一個,對吧? – kyr 2014-09-24 21:50:04

+0

所以你想要他們一次運行一個?嘗試每個系列 – aembke 2014-09-24 21:50:04

回答

2

您可以通過使用async.eachSeries()而不是async.each()來解決此問題。 async.each()並行迭代集合(您可以用async.eachLimit()限制併發性),而async.eachSeries()以串聯方式迭代集合(一次一個)。