Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/440.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/39.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用node.js+;从同步回调生成同步循环;异步模块_Javascript_Node.js_Loops_Async.js_Node Async - Fatal编程技术网

Javascript 使用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 如果我想

流行的node.js模块包括用于收集和控制流的功能,其中一些模块的版本可以并行或串行操作

但在它们中,我找不到一种方法来构造一个串联运行的循环

我正在尝试做与此伪代码相同的操作:

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”来揭示这一点(;因此,我认为仍然有好处。我能想到的另一个好处是,随着函数内容的增长,逻辑计数和检查循环是否应该结束可能会成为一个隐藏的细节。谢谢,但在我的问题中,您可能没有看到我的问题如何不涉及任务列表,而这两个函数都显式地接受一个列表谢谢,但在我的问题中,你可能没有看到我的问题如何不涉及任务列表,而这两个函数都显式地接受任务列表。