避免绕过临时的Promise对象

时间:2018-08-02 14:08:29

标签: node.js es6-promise puppeteer

我正在使用puppeteer自动执行chrome,我发现自己经常执行以下操作

// set up a promise that will resolve once some specific 
// network response (xhr for example) shows up
const eventPromise = checkForThing();
await page.click(SUBMIT_BUTTON);
await eventPromise;

下订单的原因是,我不想错过由于页面点击而发生的网络响应。

有更好的方法吗?因此,我不想在各处临时承诺对象。理想情况下,代码应该只是阅读

await page.click()
await checkForThing();

checkForThing()看起来像

    function checkForThing(page) {       

    return new Promise((resolve, reject) => {
        function handleLoginResponse(response) {
            try {
                if (response.resourceType() === 'xhr') {
                    return;
                }
                const request = response.request();


                if (response && response.status() === 401) {
                    reject(loginFailureMessage);
                } else {
                    resolve();
                }
                page.off('response', handleLoginResponse);

            } catch (error) {
                reject(loginFailureMessage);
            }
        };

        page.on('response', handleLoginResponse);
    });
}

1 个答案:

答案 0 :(得分:1)

一个等待他们的简单Promise.all怎么样?

await Promise.all([page.click(), checkForThing()])

通过这种方式,无论它们处于哪个顺序,它都将最终解决。