【发布时间】:2019-03-01 17:34:30
【问题描述】:
使用 puppeteer 将来自 2 个不同网页的数据收集到数组中以供以后比较。但是程序在继续执行之前不会等待返回的数组。
async function go(){
try{
const browser = await puppeteer.launch();
const page = await browser.newPage();
await page.goto('www.webpage.com');
const tds = await page.$$('td');
const data = [];
for (let i = 0; i < tds.length; i++){
const td = tds[i];
const tdcontent = await page.evaluate(td => td.innerText, td);
if (tdcontent.length > 5) {
data[i] = {"content": tdcontent};
}
}
return data;
} catch (e) {
console.log(e);
}
};
(async function main(){
const returnedData = await go();
console.log(returnedData.length);
})();
返回data.length 是0。 nodejs 新手,async 编程结构。我认为这是因为在返回 data 之前记录了 .length?
我如何以可以操作并完成比较的方式返回数据?
【问题讨论】:
-
您使用
await的每个函数是否都返回一个仅在完成后才解析的承诺? -
go返回一个数组而不是 Promise。 -
@ktilcu
go()实际上返回一个Promise,它解析为array,因为它是async。 -
你是对的。我的错误
-
尝试记录等待变量以确保它们都已解决。然后在 for 循环中记录数据变量。
标签: node.js ecmascript-6 async-await puppeteer ecmascript-2017