Node.js nodejs中循环中的同步流
我有以下代码用于在nodejs中接受来自命令行的输入Node.js nodejs中循环中的同步流,node.js,prompt,Node.js,Prompt,我有以下代码用于在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
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);
});
}
}
正如您所看到的,第一个iter的var1和var2的流程正在同步,但第一个iter的var2和第二个iter的var1之间并不同步
我希望以下输出序列,其中第一个iter的var2和第二个iter的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中有这样做的方法吗?完全公开,我个人认识《期货》的作者 看一看或看一看。就我个人而言,有些事情我更喜欢期货的风格 例如,要将同步For循环转换为异步For循环(为了使用异步
提示符.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
中,next是准备好进行循环中的下一次迭代时要调用的回调。我们创建一个嵌套的异步forEach。外部forEach在内部forEach完成时继续,内部forEach在调用提示回调时继续
回调的签名与Array.prototype.forEach
的签名相同,只是它添加了一个回调作为第一个参数
编辑:
不相关,但考虑使用:
这在node中起作用,但在浏览器中不起作用。完全公开,我个人认识《期货》的作者 看一看或看一看。就我个人而言,有些事情我更喜欢期货的风格 例如,要将同步For循环转换为异步For循环(为了使用异步
提示符.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
中,next是准备好进行循环中的下一次迭代时要调用的回调。我们创建一个嵌套的异步forEach。外部forEach在内部forEach完成时继续,内部forEach在调用提示回调时继续
回调的签名与Array.prototype.forEach
的签名相同,只是它添加了一个回调作为第一个参数
编辑:
不相关,但考虑使用:
这在node中工作,但在浏览器中不起作用。您可以了解流量控制的基本知识,并实现自己的系列功能,如Mixus在线丛书中所述。我发现它对Nodejs异步初学者非常有用。 书:
第7章控制流您可以理解流控制的基础知识,并实现自己的系列功能,如Mixus在线丛书中所述。我发现它对Nodejs异步初学者非常有用。 书:
第7章控制流那么,你想在prompt.get上阻塞(我假设这是一个异步函数)?@tjameson是的,有没有其他更好的方法?那么,你想在prompt.get上阻塞(我假设这是一个异步函数)?@tjameson是的,有没有其他更好的方法?
console.log("Enter data for %dth row and %jth column", i, j);