gpt4 book ai didi

node.js - Nodejs循环中的同步流程

转载 作者:太空宇宙 更新时间:2023-11-04 01:13:37 25 4
gpt4 key购买 nike

我有以下代码用于在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 的流程是同步的,但第一个 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中做到这一点?

最佳答案

全面披露,我个人认识futures的作者。

看看futuresasync 。就我个人而言,对于某些事情,我更喜欢 future 的风格。

例如,要将同步 for 循环转换为异步 for 循环(为了使用异步 prompt.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 的签名相同,只是它添加了一个回调作为第一个参数。

编辑:

不相关,但请考虑使用printf-style console.log :

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

这在 Node 中有效,但在浏览器中无效。

关于node.js - Nodejs循环中的同步流程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13544625/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com