如果异步功能出错,如何执行代码块

时间:2019-03-08 17:18:55

标签: javascript async-await

const myFunction = async() => {
    try {
        const browser = await puppeteer.launch();
        const page = await browser.newPage();
        await page.goto('https://www.google.com/');

        const performanceTiming = JSON.parse(
            await page.evaluate(() => JSON.stringify(window.performance.timing))
        );
        console.log(performanceTiming);

        await browser.close();
    } catch (error) {
        console.log(`catch error`, error);
    }
};

(async function() {
    for (let i = 0; i < 2; i++) {
        const result = await myFunction();
        if (result) {
            console.log(`it worked`);
        } else {
            console.log(`Did not work work for iteration #: ${i + 1}, trying again...`);
            i--;
        }
    }
})();

myFunction是一个异步功能。我在IIFE(立即调用函数表达式)中调用它。在IIEF内部,我期望else块仅在出现问题时才执行。但是运行此命令时,我从myFunction收到控制台消息;这意味着没有错,但是执行了bock,而我陷入了无限循环。我在做什么错?

1 个答案:

答案 0 :(得分:2)

  

我怎么了?

仅当if是真实值时,才执行result块。但是myFunction从不返回任何内容,因此返回值始终为undefined。成功的情况下,您必须退还一些东西。

或者,如果没有必要返回任何内容,请让错误冒出来,并将try...catch子句放入循环内。