等待在NodeJS / Express中生成pdf之前的所有屏幕截图
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了等待在NodeJS / Express中生成pdf之前的所有屏幕截图相关的知识,希望对你有一定的参考价值。
我的代码通过以下方式循环生成屏幕截图:
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 + ' !');
})();
}
function main(){
for (const meter of meters) {
makePngScreenshot(url, meterId, filename);
}
}
[我想在所有屏幕截图生成后生成pdf,就像我看到的here:
const firstOperation = myAsyncFunction();
const secondOperation = myAsyncFunction2('test');
const thirdOperation = myAsyncFunction3(5);
await Promise.all([ firstOperation, secondOperation, thirdOperation ]);
但是当我找不到使makePngScreenshot
返回诺言的方法时,可以将其添加到数组中,然后将await
添加到Promise.all
:
我应该怎么做?
答案
使用async/await,您可以使用async关键字使您的函数默认返回一个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等待函数的结果,一对一:
function main(){
for (const meter of meters) {
await makePngScreenshot(url, meter.meterId, meter.filename);
}
}
((我假设电表对象具有meterId和文件名,在您的代码中尚不清楚。)
或带有Promise.all:
let promises = [];
function main(){
for (const meter of meters) {
promises.push(makePngScreenshot(url, meter.meterId, meter.filename));
}
await Promise.all(promises);
}
有关详细说明,请访问我发布的链接,MDN(Mozilla Developer Newtork)或其他来源。
以上是关于等待在NodeJS / Express中生成pdf之前的所有屏幕截图的主要内容,如果未能解决你的问题,请参考以下文章