node.js - 找出一系列回调(从循环触发)何时全部执行的正确方法是什么?

标签 node.js loops

我是 Node.js 新手,很好奇在进程上(重复)运行循环的规定方法是什么,在执行结束时将发生下一步,但仅在所有迭代之后' 回调已触发。

具体来说,我正在进行 SQL 调用,并且需要在进行大量插入和更新后关闭 sql 连接,但由于它们都是异步的,所以我无法知道它们何时全部完成,这样我就可以在 session 上调用 end() 。

显然,这是一个远远超出这个特定示例的问题,因此,我不是在寻找有关 sql 的具体解决方案,而是在寻找一般实践,到目前为止,我对此感到有点困惑。

我现在所做的实际上是为循环对象的长度设置一个全局计数器,并在每个回调中从它递减,以查看它何时达到零,但这感觉真的很笨拙,我希望有更多优雅(并且以 Javascript 为中心)的方式来实现这种监控。

TIA

最佳答案

有很多可用的流程控制库可以应用模式来帮助解决此类问题。我最喜欢的是async 。例如,如果您想按顺序运行一堆 SQL 查询,您可以使用 series :

async.series([
  function(cb) { sql.exec("SOME SQL", cb) },
  function(cb) { sql.exec("SOME MORE SQL", cb) },
  function(cb) { sql.exec("SOME OTHER SQL", cb) }
], function(err, results) {
  // Here, one of two things are true:
  // (1) one of the async functions passed in an error to its callback
  //     so async immediately calls this callback with a non-null "err" value
  // (2) all of the async code is done, and "results" is
  //     an array of each of the results passed to the callbacks
});

关于node.js - 找出一系列回调(从循环触发)何时全部执行的正确方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12149365/

相关文章:

javascript - 使用nodejs将json对象附加到文件中

jquery - 带有 jQ​​uery 数据属性的每个循环都无法正常工作

java - Java中的Python itertools循环函数

javascript - 如何迭代对象数组并添加属性

javascript - Sails.js - 如果我给出未定义的 "id",所有记录都会被销毁

node.js - Socket.io.js 在 OpenShift 上返回 404

c++ - 使用 C++ 元组类型作为映射中的键

javascript - Javascript 中的 += 是什么?

node.js - 使用 Node 7 Async/Await 重新定义 Controller

javascript - 如何解决 NODE.Js HTTP POST "ECONNRESET"错误