如何在同步执行时处理人偶异常

时间:2019-09-17 14:08:09

标签: javascript node.js es6-promise puppeteer

我正在尝试实现同步呼叫:

puppeteer.launch().then(browser => {
            let html = `
            <!DOCTYPE html>
            <html>
               <body>
                 <div>
                    Hello
                 </div>
              </body>
            </html>
            `;

            let path = 'test.png';

            browser.newPage().then(page => {
                page.setContent(html).then(() => {
                    page
                        .screenshot({
                            path: path,
                            clip: {
                                x: 50,
                                y: 50,
                                width: 100,
                                height: 100
                            },
                            omitBackground: true
                        })
                        .then(() => {});
                });
            });
            browser.close().then(() => {});
        });

我收到以下异常:

(节点:22140)UnhandledPromiseRejectionWarning:错误:协议错误(Target.createTarget):目标已关闭。     在Promise(C:\ ImageServer \ node_modules \ puppeteer \ lib \ Connection.js:74:56)     在新的Promise()     在Connection.send(C:\ ImageServer \ node_modules \ puppeteer \ lib \ Connection.js:73:12)     在Browser._createPageInContext(C:\ ImageServer \ node_modules \ puppeteer \ lib \ Browser.js:174:47)     在BrowserContext.newPage(C:\ ImageServer \ node_modules \ puppeteer \ lib \ Browser.js:367:26)     在Browser.newPage(C:\ ImageServer \ node_modules \ puppeteer \ lib \ Browser.js:166:33)     在浏览器上。 (C:\ ImageServer \ node_modules \ puppeteer \ lib \ helper.js:112:23)     在puppeteer.launch.then.browser(C:\ ImageServer \ imageServer.js:48:12)     在process._tickCallback(内部/进程/next_tick.js:68:7) (节点:22140)UnhandledPromiseRejectionWarning:未处理的承诺拒绝。引发此错误的原因可能是抛出了一个没有catch块的异步函数,或者是拒绝了一个.catch()无法处理的承诺。 (拒绝ID:1) (节点:22140)[DEP0018] DeprecationWarning:已弃用未处理的承诺拒绝。将来,未处理的承诺拒绝将以非零退出代码终止Node.js进程。

我该如何解决?

1 个答案:

答案 0 :(得分:1)

问题是您在browser.newPage之后立即关闭浏览器。您应该将browser.close()移至then的{​​{1}}。

screenshot