Node.js 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

我有以下代码用于在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);
        });
    }
}
正如您所看到的,第一个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);