Какова семантика возврата асинхронной функции? - PullRequest
0 голосов
/ 05 октября 2018

Я пытаюсь обернуть голову вокруг правила no-return-await .

Рассмотрим этот фрагмент:

const a = async () => {
    return 5;
};

const b1 = async () => {
    return a();
};

const b2 = async () => {
    return await a();
};

const wut = async () => {
    console.log(await b1());
    console.log(await b2());
};

wut();

Каждая асинхронная функция возвращает обещание, поэтому a() возвращает обещание.В этом случае я ожидаю, что b1() также обернет обещание, поэтому результатом будет вложенное обещание.Для извлечения значения потребуется двойное ожидание, как в b2, но это не требуется, поскольку оба console.log возвращают значение должным образом.В чем дело?Разрешены ли вложенные обещания рекурсивно?Я потерялся.Спасибо за любые указатели и объяснения!

1 Ответ

0 голосов
/ 05 октября 2018

Это то, как обещания ведут себя в целом и не относятся к синтаксису async / await.

Если обещание разрешается с помощью другого обещания, то оно фактически превращается в это обещание, а не разрешается немедленно.

...