【发布时间】:2019-10-28 08:32:36
【问题描述】:
function sleep(ms) {
var start = new Date().getTime(),
expire = start + ms;
while (new Date().getTime() < expire) {}
return;
}
async function executeWithDelay(offers) {
return Promise.all(
offers.map((offer, i) =>
getDetailedInfo(offer).then(data => {
offer = data;
if (i % 5 === 0) {
console.log('executed but it delays now for 3 seconds');
sleep(3000);
}
})
)
).then(function(data) {
return offers;
});
}
尝试使用可能的最佳解决方案来实现网络抓取。我将 Cheerio 和 puppeteer 结合在一起,我有一些不错的代码要调试。如果报价数据较少,即 5-10 条记录,则上述代码可以正常工作。如果超过,浏览器会崩溃,尽管我在无头版本中运行。
这基本上是由于我正在使用的包中的内部错误无法处理负载。我的实验是对每批记录进行一点延迟,并完成完整的记录执行。
但是对于下面的代码,它表现为非阻塞代码,并且第一次延迟和休息不断执行。
我应该使用 for 循环而不是 map 还是有其他方法来处理这种情况?
【问题讨论】:
标签: javascript google-chrome puppeteer cheerio