- Welcome to the Node.js Platform
- Node.js Essential Patterns
- Asynchronous Control Flow Patterns with Callbacks
- Asynchronous Control Flow Patterns with ES2015 and Beyond
- Coding with Streams
- Design Patterns
- Writing Modules
- Advanced Asynchronous Recipes
- Scalability and Architectural Patterns
- Messaging and Integration Patterns
- Welcome to the Node.js Platform
- Node.js 的发展
- Node.js 的特点
- 介绍 Node.js 6 和 ES2015 的新语法
- reactor 模式
- Node.js Essential Patterns
- Asynchronous Control Flow Patterns with Callbacks
- Asynchronous Control Flow Patterns with ES2015 and Beyond
- Coding with Streams
- Design Patterns
- Writing Modules
- Advanced Asynchronous Recipes
- Scalability and Architectural Patterns
- Messaging and Integration Patterns
文章来源于网络收集而来,版权归原创者所有,如有侵权请及时联系!
并行执行
async
不具有处理并行流的功能,其中可以找到 each()
, map()
, filter()
, reject()
, detect()
, some()
, every()
, concat()
, parallel()
, applyEach()
和 times()
。它们遵循与我们已经看到的用于顺序执行的功能相同的逻辑,区别在于所提供的任务是并行执行的。
为了证明这一点,我们可以尝试应用上述功能之一来实现我们的 Web 爬虫
应用程序的第三版,即使用无限制的并行流程来执行下载。
如果我们记住我们之前使用的代码来实现 spiderLinks()
函数的顺序版本,那么调整它使其并行工作就比较简单:
function spiderLinks(currentUrl, body, nesting, callback) {
// ...
async.each(links, (link, callback) => {
spider(link, nesting - 1, callback);
}, callback);
}
这个函数与我们用于顺序下载的功能完全相同,但是使用的是 async.each()
而非 async.eachSeries()
。这清楚地表明了使用库(例如 async
)抽象异步流的功能。代码不再绑定到特定的执行流程了,没有专门为此写的代码。大多数只是应用逻辑。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论