执行函数作为异步Node.js脚本的最后一件事

时间:2017-07-14 15:22:56

标签: javascript node.js asynchronous

假设您有一个Node.js脚本,该脚本运行许多异步函数,这些函数从多个服务器请求数据。你永远不知道得到答案的时间和回调的执行情况。

当查询中的所有异步内容完成时,执行该脚本功能的最简单方法是什么?

2 个答案:

答案 0 :(得分:1)

像往常一样,这取决于异步代码的工作方式,即使用回调或承诺。

使用回调

您可以使用async等库。它允许您按顺序或并行或以您想要的任何其他样式运行多个异步任务,但所有这些选项都有共同点:完成所有任务后,异步会运行最终回调。

如果您将代码放入该回调中,则可以得到您所要求的内容。

举一个语法示例(通过并行运行所有任务):

async.parallel([
  done => {
    // This is the first task.
  },
  done => {
    // This is the second task.
  },
  done => {
    // This is the third task.
  }
], err => {
  // This is the final callback.
});

当然,您拥有多少任务并不重要,如果您不想并行运行它们,请使用async的其他功能之一,例如: series如果你想一个接一个地运行。

使用承诺

如果您有许多承诺,事情就会变得更容易,因为您可以使用Promise.all函数等待所有承诺都已解决。然后你可以有一个最后的处理程序来做你最后的事情。

再说一次,举个例子,假设p1p2p3是承诺,那么你可以这样做:

Promise.all([ p1, p2, p3 ]).then(results => {
  // ...
});

答案 1 :(得分:0)

如果使用promises,请将它们全部置于Promise.all调用中,然后将then链接到该调用上。当.all调用中的所有承诺解决时,它将被调用。

Promise.all([promise1, promise2, promise3])
  .then(allPromiseData => console.log('all the async promises are done');