异步库

如果您看一下我们迄今为止分析的每个控制流模式,您会发现它们可以用作构建可重用和更通用的解决方案的基础。 例如,我们可以将无限并行执行算法包装到一个函数中,该函数接受任务列表,并行运行它们,并在所有任务完成时调用给定的回调。 这种将控制流算法包装到可重用函数中的方法可以导致定义异步控制流的更具声明性和表现力的方式,而这正是 async (nodejsdp.link/async) 所做的。

async 库(不要与 async/await 关键字混淆,我们将在本书后面讨论)是 Node.js 和 JavaScript 中非常流行的解决方案,用于处理异步代码。 它提供了一组函数,极大地简化了不同配置中任务的执行,并且还提供了用于异步处理集合的有用帮助程序。 尽管还有其他几个具有类似目标的库,但由于其历史悠久的流行度,async 已成为 Node.js 中事实上的标准,尤其是在使用回调来定义异步任务时。

只是为了让您了解 async 模块的一些最重要的功能,以下是它公开的功能示例:

  • 对元素集合执行异步函数(以有限并发的方式串行或并行)。

  • 执行一系列异步函数(瀑布式),其中每个函数的输出都成为下一个函数的输入。

  • 提供一种队列抽象,其功能与我们使用 TaskQueue 实用程序实现的队列抽象相同。

  • 提供其他有趣的异步模式,例如 race(并行执行多个异步函数,并在第一个异步函数完成时停止)。

查看异步文档 (nodejsdp.link/async) 以了解有关该模块的更多信息并查看一些示例。

一旦您了解了本章中描述的异步模式的基础知识,您就不应该依赖此处提供的简化实现来满足日常控制流需求。 相反,最好为您的生产应用程序采用广泛使用且经过实际检验的库(例如 async),除非您的用例非常高级以至于需要自定义算法。