我有一组 URL 可以从以下位置抓取数据:
urls = ['url','url','url'...]
这就是我正在做的:
urls.map(async (url)=>{
await page.goto(url);
await page.waitForNavigation({ waitUntil: 'networkidle' });
})
这似乎不等待页面加载并很快访问所有 URL(我什至尝试使用 page.waitFor
)。
我想知道我是不是在做一些根本性的错误,或者不建议/不支持这种类型的功能。
原文由 ahhmarr 发布,翻译遵循 CC BY-SA 4.0 许可协议
map
,forEach
,reduce
等不等待它们内部的异步操作.有多种方法可以在执行异步操作时同步遍历迭代器的每个项目,但在这种情况下,我认为最简单的方法是简单地使用普通的
for
运算符,它会等待操作结束。如您所料,这将一个接一个地访问 url。如果您对使用 await/async 进行串行迭代感到好奇,可以看看这个答案: https ://stackoverflow.com/a/24586168/791691