【发布时间】:2014-11-19 13:03:45
【问题描述】:
所以,我有一个包含三个对象的数组。它们具有名称和类型属性(以及其他各种属性)。我想遍历它们中的每一个并使用readline 模块来获取所有这些的用户输入。这是我用来执行此操作的 javascript 代码(使用 async 模块):
async.each(questions.q, function (e, cb) {
if (e.type === "s") {
//not important
} else if (e.type === "q") {
rl.question(e.name, function (a) {
//do stuff
cb();
});
}
}, function (err) {
if (err) throw err;
});
(question.q 是元素数组)
但是,我所有三个带有type q 的对象的输出如下:
Question1Question2Question3 //input
each 不是一次执行一个,而是将所有 3 个打印出来,然后等待输入。为什么会这样,我该如何解决?
【问题讨论】:
-
如果你不想要这种行为,听起来你不应该异步运行这些,但我想如果你想使用 async 保持代码,你可以很容易地用编号变量模拟锁定机制.
-
@ShaneQful 我认为异步运行这些是正确的做法吗?它会等到工作完成后再继续下一个,对吗?
-
所以你想让他们一次运行一个?尝试每个系列
-
@kyr 没有一次运行一个并继续下一个是同步行为。使用异步行为,它们同时运行并且无法保证顺序。
-
@aembke 这行得通!我很惊讶我以前没有看到。
标签: javascript node.js loops asynchronous foreach