在 Node.js 中,异步编程是非常重要的一部分。在 ES6 中,引入了 Promise 对象来解决回调地狱的问题。而在 ES7 中,又引入了 async/await,它可以让我们更加方便地编写异步代码,让代码更加易读易维护。本篇文章将介绍 async/await 的使用,并通过一个爬取并发网站的实例来演示它的实战应用。
async/await 简介
async/await 是 ES7 中的新特性,它是对 Promise 的进一步封装,使得异步代码更加易读易维护。async 表示函数是异步的,而 await 表示等待异步操作完成。async/await 的优点有:
- 代码更加简洁易读
- 错误处理更加方便
- 可以使用 try/catch 来捕获错误
下面是一个简单的例子,演示了 async/await 的基本用法。
// javascriptcn.com 代码示例 async function sayHello() { return 'Hello World'; } async function run() { const message = await sayHello(); console.log(message); } run();
在上面的代码中,我们定义了一个异步函数 sayHello,它返回一个 Promise 对象。然后我们定义了另一个异步函数 run,它使用 await 等待 sayHello 函数的结果,并将结果打印出来。最后我们调用 run 函数,输出结果为 Hello World。
实战应用:Node.js 爬取并发网站
在本节中,我们将使用 async/await 来爬取并发网站的数据。首先我们需要安装需要的依赖:
npm install request-promise cheerio
- request-promise:用于发起 HTTP 请求
- cheerio:用于解析 HTML 文档
接下来我们编写代码来爬取并发网站的数据。代码如下:
// javascriptcn.com 代码示例 const rp = require('request-promise'); const cheerio = require('cheerio'); async function getConcurrenceData() { const url = 'https://www.biancheng.net/concurrent/'; const html = await rp(url); const $ = cheerio.load(html); const articles = []; $('.art-list li').each(function() { const $this = $(this); const title = $this.find('.art-title').text(); const author = $this.find('.art-author').text(); const date = $this.find('.art-date').text(); const link = $this.find('.art-title a').attr('href'); articles.push({ title, author, date, link }); }); return articles; } async function run() { const articles = await getConcurrenceData(); console.log(articles); } run();
在上面的代码中,我们定义了一个异步函数 getConcurrenceData,它使用 request-promise 发起 HTTP 请求,并使用 cheerio 解析 HTML 文档。然后我们使用 $ 对象来查找 HTML 元素,并将数据存储在一个数组中。最后我们返回这个数组。
在 run 函数中,我们调用了 getConcurrenceData 函数,并将结果打印出来。运行代码后,我们可以看到控制台输出了并发网站的数据。
总结
本篇文章介绍了 async/await 的基本用法,并通过一个实例演示了它的实战应用。在 Node.js 中,使用 async/await 可以让我们更加方便地编写异步代码,使得代码更加易读易维护。在实际开发中,我们可以使用 async/await 来处理异步操作,让我们的代码更加优雅。
来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/65580897d2f5e1655d246e66