首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将函数作为异步Node.js脚本的最后一部分执行

将函数作为异步Node.js脚本的最后一部分执行
EN

Stack Overflow用户
提问于 2017-07-14 23:22:56
回答 2查看 48关注 0票数 0

假设您有一个运行大量异步函数的Node.js脚本,这些函数从多个服务器请求数据。你永远不会知道什么时候得到答案,什么时候回调被执行。

当查询中的所有异步内容都完成时,执行该脚本的函数作为最后要做的最后一件事的简单方法是什么?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-07-14 23:28:01

就像通常的情况一样,这取决于你的异步代码是如何工作的,也就是说,你是在使用回调还是promises。

使用回调

为此,您可以使用诸如async之类的库。它允许您按顺序或并行运行多个异步任务,或者以您想要的任何其他方式运行,但所有这些选项都有一个共同点:一旦所有任务都完成,异步就会运行最终的回调。

如果你把你的代码放到回调中,你就会得到你想要的东西。

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

代码语言:javascript
复制
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.
});

当然,你有多少任务并不重要,如果你不想并行运行它们,可以使用异步的其他函数之一,例如,如果你想一个接一个地运行,就使用series

使用promises

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

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

代码语言:javascript
复制
Promise.all([ p1, p2, p3 ]).then(results => {
  // ...
});
票数 1
EN

Stack Overflow用户

发布于 2017-07-14 23:28:33

如果使用promises,将它们都放在一个Promise.all调用中,然后将一个then链接到该调用上。当.all调用中的所有promises都被解析时,它将被调用。

代码语言:javascript
复制
Promise.all([promise1, promise2, promise3])
  .then(allPromiseData => console.log('all the async promises are done');
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45106564

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档