Javascript 使用node.js+;从同步回调生成同步循环;异步模块
流行的node.js模块包括用于收集和控制流的功能,其中一些模块的版本可以并行或串行操作 但在它们中,我找不到一种方法来构造一个串联运行的循环 我正在尝试做与此伪代码相同的操作:Javascript 使用node.js+;从同步回调生成同步循环;异步模块,javascript,node.js,loops,async.js,node-async,Javascript,Node.js,Loops,Async.js,Node Async,流行的node.js模块包括用于收集和控制流的功能,其中一些模块的版本可以并行或串行操作 但在它们中,我找不到一种方法来构造一个串联运行的循环 我正在尝试做与此伪代码相同的操作: forever { l = getline(); if (l === undefined) { break; } else { doStuff(l); } } 如果我想并行调用对getLine()的所有调用,我可以使用async.while 如果我想
forever {
l = getline();
if (l === undefined) {
break;
} else {
doStuff(l);
}
}
- 如果我想并行调用对
的所有调用,我可以使用getLine()
async.while
- 如果我想迭代数组,而不是像
或for
循环那样,我可以使用while
async.eachSeries
系列
行为,而不是集合迭代?异步。虽然
确实按照您需要的顺序执行其功能,但您可以这样做:
var l = getline();
async.whilst(
function () { return l !== undefined; },
function (callback) {
doStuff(l);
l = getline();
callback(); // Check function isn't called again until callback is called
},
function (err) {
// All done
}
);
async。虽然
确实按照您需要的顺序执行其功能,但您可以执行以下操作:
var l = getline();
async.whilst(
function () { return l !== undefined; },
function (callback) {
doStuff(l);
l = getline();
callback(); // Check function isn't called again until callback is called
},
function (err) {
// All done
}
);
如果您想像同步代码一样以串行方式执行循环,那么应该使用async.series或async.fallfall 系列(任务,[回调]) 串联运行一系列函数,每个函数运行一次 上一个功能已完成。如果序列中有任何函数通过 它的回调出错,不再运行任何函数,并且回调失败 对于序列,将立即使用错误值调用。一旦 任务已完成,结果将传递给最终回调 作为一个数组 瀑布(任务,[回调]) 运行一系列函数,每个函数将其结果传递给 数组中的下一个。但是,如果任何函数传递错误 对于回调函数,不执行下一个函数,并且 回调会立即调用,并出现错误
瀑布链回调以传递一个的输出作为下一个的输入,系列只是以串行方式执行。如果您想像同步代码一样以串行方式执行循环,应该使用async.series或async.瀑布 系列(任务,[回调]) 串联运行一系列函数,每个函数运行一次 上一个功能已完成。如果序列中有任何函数通过 它的回调出错,不再运行任何函数,并且回调失败 对于序列,将立即使用错误值调用。一旦 任务已完成,结果将传递给最终回调 作为一个数组 瀑布(任务,[回调]) 运行一系列函数,每个函数将其结果传递给 数组中的下一个。但是,如果任何函数传递错误 对于回调函数,不执行下一个函数,并且 回调会立即调用,并出现错误
瀑布链回调以传递一个的输出作为下一个的输入,系列只是以系列的形式执行。这让我思考
async.while()
比while
有什么优势;还有,在任何情况下,实际的异步循环构造是否有意义。@hippietrail在doStuff
是同步的情况下,简单的while
是更好的选择。但是如果doStuff
是异步的,那么while
是有意义的。实际上我的getLine()
是异步的,尽管我的伪代码是“pseudo”来揭示这一点(;因此,我认为仍然有好处。我能想到的另一个好处是,随着函数内容的增长,逻辑计数和检查循环是否应该结束可能会成为一个隐藏的细节。这让我思考async.while()
有超过的while
;以及是否存在实际异步循环构造有意义的情况。@hippietrail在doStuff
是同步的情况下,简单的while
是更好的选择。但是如果doStuff
是异步的,那么while
就有意义了。a实际上,我的getLine()
是异步的,尽管我的伪代码是“pseudo”来揭示这一点(;因此,我认为仍然有好处。我能想到的另一个好处是,随着函数内容的增长,逻辑计数和检查循环是否应该结束可能会成为一个隐藏的细节。谢谢,但在我的问题中,您可能没有看到我的问题如何不涉及任务列表,而这两个函数都显式地接受一个列表谢谢,但在我的问题中,你可能没有看到我的问题如何不涉及任务列表,而这两个函数都显式地接受任务列表。