Могу ли я поймать ошибку из асинхронного без использования await?

Могут ли ошибки от неожиданного асинхронного вызова быть перехвачены, отправлены в исходную инкапсулирующую команду try / catch или вызвать необработанное исключение?

Вот пример того, что я имею в виду:

async function fn1() {
    console.log('executing fn1');
}

async function fn2() {
    console.log('executing fn2');
    throw new Error('from fn2');
}

async function test() {
    try {
        await fn1();
        fn2();
    }
    catch(e) {
        console.log('caught error inside test:', e);
    }
}

test();

В этом случае ошибка выдается изfn2 будет тихо проглочен и точно не пойман оригиналомtry/catch, Я считаю, что это ожидаемое поведение, так какfn2 Скорее всего, будет перенесен в цикл событий, чтобы закончить в какой-то момент в будущем, иtest не волнует, когда это заканчивается (что является преднамеренным).

Есть ли способ гарантировать, что ошибки не будут случайно поглощены такой структурой, кроме как поставитьtry/catch внутренний кfn2 и делать что-то вроде выдачи ошибки? Я бы даже согласился на необработанную ошибку, не зная, как ее перехватить, я думаю - я не ожидаю, что сгенерированные ошибки будут типичным потоком программы с тем, что я пишу, но проглатывание ошибок делает его относительно раздражающим для отладки.

Примечание: я использую Babel для переноса кода, используя преобразование babel-runtime, и выполняю его с помощью узла.

Ответы на вопрос(2)

Ваш ответ на вопрос