场景1.一个请求接着一个请求
案例:后一个请求依赖前一个请求,下面以爬取一个网页内的图片为例,使用了superagent请求模块,cheerio页面分析模块,图片的地址需要分析网页内容得出,所以必须按顺序进行请求。
const request = require('superagent')
const cheerio = require('cheerio')
// 简单封装下请求,其他的类似
function getHTML(url) {
// 一些操作,比如设置一下请求头信息
return superagent.get(url).set('referer', referer).set('user-agent', userAgent)
}
// 下面就请求一张图片
async function imageCrawler(url) {
let res = await getHTML(url)
let html = res.text
let $ = cheerio.load(html)
let $img = $(selector)[0]
let href = $img.attribs.src
res = await getImage(href)
retrun res.body
}
async function handler(url) {
let img = await imageCrawler(url)
console.log(img) // buffer 格式的数据
// 处理图片
}
handler(url)
其中await getHTML
是必须的,如果省略了await程序就不能按期得到结果。执行流程会先执行await后面
的表达式,其实际返回的是一个处于pending状态