等待在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之前的所有屏幕截图的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Express 中生成 CSRF 令牌?

NodeJS Express 异步/等待

在ios中生成PDF文件[重复]

未在 laravel 中生成 PDF

如何在 Prestashop 中生成 pdf?

在 iOS 中生成第一个 PDF 页面的图像