2013-02-17 90 views
1

流行的node.js模块async包含集合和控制流的功能,其中一些版本可以并行或串行操作。通过node.js +异步模块实现同步回调

但其中我找不到一种方法来构建一个循环操作系列。

我试图做同样的,因为这伪代码:

forever { 
    l = getline(); 

    if (l === undefined) { 
     break; 
    } else { 
     doStuff(l); 
    } 
} 
  • 如果我想getLine()并行叫我可以使用async.whilst的所有呼叫。
  • 如果我想迭代一个数组而不是像forwhile这样的循环,我可以使用async.eachSeries

我能用什么来获得控制流中的series行为而不是集合迭代?

回答

1

async.whilst确实执行其功能的串行像你需要,那么你可以做这样的事情:如果你想在系列执行环就像一个同步码

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 
    } 
); 
+0

这让我思考'async.whilst()'比'while'更有优势吗?以及是否有任何情况下实际的异步循环结构会有意义。 – hippietrail 2013-02-17 06:50:45

+0

@hippietrail在你的'doStuff'是同步的情况下,一个简单的'while'是更好的选择。但是,如果'doStuff'是异步的,那么'while'会有意义。 – JohnnyHK 2013-02-17 14:19:18

+0

实际上我的getLine()是异步的,虽然我的伪代码是“伪”来揭示( - ;所以我认为还是有好处的,另一个我能想到的是逻辑计数和检查循环应该随着功能的增长而变成一个埋藏的细节。 – hippietrail 2013-02-18 05:57:00

0

,你应该使用异步。串联或async.waterfall

系列(任务,[回调])

运行的功能串联阵列,电子一旦一个 前一个功能完成,就会运行一个。如果系列中的任何功能通过 回调出现错误,则不会运行更多功能,系列的回调 立即使用错误值调用。一旦 任务已完成,结果将作为数组传递给最终回调 。

瀑布(任务,[回调])

运行在一系列功能的阵列,每个传递它们的结果到 下一在数组中。但是,如果任何函数将错误 传递给回调,则不会执行下一个函数,并立即调用主要的 回调并返回错误。

瀑布链回调传递一个输出作为下一个的输入,系列只是串联执行。

+0

谢谢,但您可能没有在我的问题中看到我的问题没有涉及任务列表,并且这两个函数都明确地列出了任务列表。 – hippietrail 2013-02-17 10:13:54