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程