nodejs中的循环中的同步stream程

我有以下代码接受来自命令行的input在nodejs中

for(i=0; i<2;i++) { for(j=0; j<2; j++) { console.log("Enter data for "+i+"th row and "+j+"th column"); prompt.get(['var1', 'var2'], function (error, result) { console.log("var1 is "+result.var1); console.log("var2 is "+result.var2); }); } } 

我得到的输出为

 Enter data for 0th row and 0th column prompt: var1: Enter data for 0th row and 1th column prompt: var1: Enter data for 1th row and 0th column prompt: var1: Enter data for 1th row and 1th column prompt: var1: 

正如你所看到的,对于第一个iter的var1和var2来说stream程是同步的,但是在第一个iter的var2和第二个的var1之间不同步

我希望下面的输出顺序,其中第一个的var2和第二个的var1也是同步的,依此类推。

 Enter data for 0th row and 0th column prompt: var1: 10 prompt: var2: 100 Enter data for 0th row and 1th column prompt: var1: 20 prompt: var2: 100 Enter data for 1th row and 0th column prompt: var1: 30 prompt: var2: 100 Enter data for 1th row and 1th column prompt: var1: 40 prompt: var2: 100 

有没有办法做到这一点在nodejs?

充分披露,我个人知道futures的作者。

看看期货或asynchronous 。 就个人而言,我更喜欢某种东西的风格。

例如,要将您的同步for循环转换为asynchronousfor循环(以便使用asynchronousprompt.get ),请尝试如下所示:

 var forEachAsync = require('forEachAsync'); forEachAsync([0, 1], function (next, _, i) { forEachAsync([0, 1], function (next, _, j) { console.log("Enter data for "+i+"th row and "+j+"th column"); prompt.get(['var1', 'var2'], function (error, result) { console.log("var1 is "+result.var1); console.log("var2 is "+result.var2); next(); }); }).then(next); }); 

futures ,接下来是在准备好循环中的下一次迭代时调用的callback函数。 我们创build一个嵌套的asynchronousforEach。 当forEach内部完成时,外部forEach继续,当提示callback被调用时,内部forEach继续。

callback的签名与Array.prototype.forEach的签名相同,只是它有一个callback作为第一个参数。

编辑:

不相关,但考虑使用printf样式的console.log :

 console.log("Enter data for %dth row and %jth column", i, j); 

这在节点而不是在浏览器中工作。

您可以了解stream量控制的基本知识,并按照本联机手册中Mixus所述执行您自己的系列function。 我发现它对于Nodejsasynchronous初学者来说非常有用。 书: http : //book.mixu.net/node/single.html章节:7控制stream程