昨天想要实现个打印网页为 PDF 的功能,顺便学习 TypeScript 和 Nest.js 。 遇到了这些问题:
- 方法的返回值类型定为Promise<Buffer>,但也有可能返回 puppeteer 的Error,这时候返回值该咋写,也没错误提示
- page.goto()方法定了 5 秒的 timeout,但还是有可能触发超时错误,这个该咋办,真实浏览器响应很快
- 一堆 await 的代码该如何组织,错误该如何处理?
附上代码:
async generatePDFFromURL(url: string): Promise<Buffer> {
return new Promise<Buffer>(async (resolve, reject) => {
const browser = await puppeteer.launch(),
page = await browser.newPage();
try {
await page.goto(url, {
timeout: 5000,
});
} catch(error) {
reject(error);
}
const pdf = await page.pdf({
format: 'A4',
});
await browser.close();
resolve(pdf);
});
}