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



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

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

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

使用回调

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

如果你把你的代码放到那个回调中,你得到的正是你所要求的。

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

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是否要一个接一个地运行。

使用承诺

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

同样,举个例子,让我们假设p1p2p3是承诺,那么你可以这样做:

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

如果使用 promise,请将它们全部放入Promise.all调用中,然后将then链接到该调用。当.all调用中的所有承诺解析时,它将被调用。

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

最新更新