假设您有一个运行大量异步函数的Node.js脚本,这些函数从多个服务器请求数据。你永远不会知道什么时候得到答案,什么时候回调被执行。
当查询中的所有异步内容都完成时,执行该脚本的函数作为最后要做的最后一件事的简单方法是什么?
发布于 2017-07-14 23:28:01
就像通常的情况一样,这取决于你的异步代码是如何工作的,也就是说,你是在使用回调还是promises。
使用回调
为此,您可以使用诸如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.
});当然,你有多少任务并不重要,如果你不想并行运行它们,可以使用异步的其他函数之一,例如,如果你想一个接一个地运行,就使用series。
使用promises
如果你有一堆承诺,事情甚至会变得更容易,因为你可以使用Promise.all函数来等待,直到所有的承诺都解决了。然后你可以有一个最后的处理程序来做你的最后的事情。
再举一个例子,假设p1、p2和p3是promises,那么你可以这样做:
Promise.all([ p1, p2, p3 ]).then(results => {
// ...
});发布于 2017-07-14 23:28:33
如果使用promises,将它们都放在一个Promise.all调用中,然后将一个then链接到该调用上。当.all调用中的所有promises都被解析时,它将被调用。
Promise.all([promise1, promise2, promise3])
.then(allPromiseData => console.log('all the async promises are done');https://stackoverflow.com/questions/45106564
复制相似问题