Как сгенерировать ошибку в асинхронной функции и обработать ее только у не непосредственного абонента? - PullRequest
0 голосов
/ 05 июля 2018

С помощью обычных функций в Javascript вы можете выбросить ошибку вниз по стеку вызовов и обработать ее не сразу же, как это:

var a = function () {
    throw new Error ("MyError!!!!");
};
var b = function () {
    a();
};

try {
    b();
} catch (e) {
    console.log ("CAUGHT!!");
}

Но в асинхронных (async / await) функциях кажется, что ошибку нужно обрабатывать на каждом этапе пути.

Если у меня есть некоторая функциональность многократного использования в асинхронной функции, которая должна выдать ошибку, есть ли способ обработать ошибку не вызывающего абонента (как в примере - 2 уровня вниз по стеку вызовов вместо 1) поэтому я не рассматриваю шаблон N функций, которые его используют, и функций M, которые используют эти N функций?

1 Ответ

0 голосов
/ 05 июля 2018

Но в асинхронных функциях кажется, что ошибку нужно обрабатывать на каждом этапе пути.

Это не тот случай. Как и в случае с Promises, просто catch на уровне, который вам нужен, чтобы отловить ошибку. async функции возвращают Promises, в конце концов:

var a = async function () {
    throw new Error ("MyError!!!!");
};
var b = async function () {
    await a();
};
var c = async function () {
    await b();
};

c().catch(e => console.log ("CAUGHT!!"));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...