我正在针对大约 50 个站点列表运行灯塔 cli 。我只是在一个.forEach
循环中运行它,如果我理解的话,它是阻塞的,也就是同步的。但是,我最终一次性启动了 50 个 Chrome Canary 实例。在我对这些事情的有限理解中,我认为线程是同步启动的,但随后node
可以将线程传递给内核并愉快地启动下一个。同样,这只是我对正在发生的事情的随意理解。
我正在使用我从某处抄袭的这个功能:
function launchChromeAndLighthouse(url, opts, config = null) {
return chromeLauncher.launch({chromeFlags: opts.chromeFlags}).then(chrome => {
opts.port = chrome.port;
return lighthouse(url, opts, config).then(results =>
chrome.kill().then(() => results));
});
}
nextTick
我在循环中尝试过:
asyncFuncs().then( async (sites) => {
sites.forEach( (site) => {
process.nextTick(launchChromeAndRunLighthouse(site.url, opts))
})
})
但这仍然会产生一堆 Chrome 实例。如何在一个灯塔完成时暂停执行?