Используя async / await , вы можете использовать ключевое слово asyn c, чтобы заставить вашу функцию возвращать Promise по умолчанию:
async function makePngScreenshot(url, meterId, filename) {
axios.get(url, null); // Make the request to generate html page
(async () => { // Make screenshot
console.log(url);
await new Pageres({delay: 2, filename: filename})
.src(url, ['1300x650'], {crop: true})
.dest("public/images/" + operation.data.name + "/" + meterId
)
.run();
console.log('Finished generating report for:' + meterId + ' !');
})();
}
makePngScreenshot теперь будет вернуть объект Promise.
И затем вы можете использовать await для ожидания результата функции,
либо один за другим:
async function main(){
for (const meter of meters) {
await makePngScreenshot(url, meter.meterId, meter.filename);
}
}
(я предположил, что счетчик Объект имеет meterId и имя файла, это не ясно в вашем коде.)
или с Promise.all:
let promises = [];
async function main(){
for (const meter of meters) {
promises.push(makePngScreenshot(url, meter.meterId, meter.filename));
}
await Promise.all(promises);
}
Тест с:
main()
console.log("promises resolved");
Для Более подробное объяснение можно найти по ссылке, которую я разместил, MDN (Mozilla Developer Newtork) или в других источниках.