正如标题所述,我正在尝试进行嵌套的请求调用,其中第一个请求从页面的html抓取一个img src,然后将该src传递给另一个请求。
var fs = require('fs');
var request = require('request');
var cheerio = require('cheerio');
async function main() {
for (let i = 1; i < 1061; i++) {
let url = `https://manuals.co/workshop/volkswagen/corrado/volkswagen-corrado-1990-1994-workshop-manual/5874057/${i}`
await getSrc(url, i)
}
}
async function getSrc(uri, j) {
request(uri, function(error, response, html) {
let $ = cheerio.load(html)
const imgSrc = $('.bi.x0.y0.w0.h1').attr("src")
console.log(imgSrc)
request(imgSrc).pipe(fs.createWriteStream(`images/test-${j}.png`)).on('close', function() {
console.log(`Completed image number: ${j}`)
})
})
}
main()
运行此命令时,“ imgSrc”作为“未定义”记录到控制台,并且出现错误:
Error: undefined is not a valid uri or options object.
我尝试如下使用await:
const imgSrc = await $('.bi.x0.y0.w0.h1').attr("src")
在这种情况下,我在该行上收到错误“意外的标识符”。 我还将指出,当我自己运行getSrc函数(不在for循环中)时,它会按预期运行。我不知该如何将其置于循环中而破裂。
我对node.js和异步编程非常陌生,因此我正在寻找一种可以帮助我了解这些工作原理的解决方案。
答案 0 :(得分:0)
尝试同步运行它。删除async
和await
,看看是否仍然出现该错误。如果您仍然这样做,则$('.bi.x0.y0.w0.h1').attr("src")
可能会返回未定义的值。