Как выполнить блок кода, если произошла ошибка асинхронной функции - PullRequest
0 голосов
/ 08 марта 2019
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; это означает, что ничего не пошло не так, но иначе Бок выполняется, и я вхожу в бесконечный цикл. Что я делаю не так?

1 Ответ

2 голосов
/ 08 марта 2019

Что я делаю не так?

Вы выполняете блок if, только если result - верное значение. Но myFunction никогда ничего не возвращает, поэтому возвращаемое значение всегда будет (обещание, которое разрешается до) undefined. Вы должны вернуть что-то в успешном случае.

Или, если возвращать что-то бессмысленно, дайте ошибке всплыть и поместите в цикл предложение try...catch.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...