Просто чтобы выполнить ваш код в качестве теста, мы будем использовать async / await и IIFE
Затем создаст функцию, которая поместит весь наш запрос в массив неразрешенных обещаний, чтобы мы могли использовать его с Promise.all()
Вам нужно переписать код примерно так:
(async() => {
const promisesToExecute = [];
const launchChromeAndRunLighthouse = async (url, opts, config = null) => {
const chrome = await return chromeLauncher.launch({chromeFlags: opts.chromeFlags});
opts.port = chrome.port;
promisesToExecute.push(lighthouse(url, opts, config));
}
const results = await Promise.all(promisesToExecute);
for(const result of results) {
const resolvedResult = await result.kill();
// here you can access your results.lhr
console.log(resolvedResult.lhr);
}
})()
Обратите внимание, , этот код не был проверен, поэтому могут быть проблемы с kill()
в результате. Но главная цель - ответить на ваш вопрос и объяснить, как выполнять обещания.
Кроме того, если вы не хотите выполнять все обещания одновременно, вы можете использовать Promise.waterfall с некоторым пакетом npm, например this