Почему при добавлении в рекурсивной асинхронной функции она возвращает неопределенное значение? - PullRequest
0 голосов
/ 30 января 2019

У меня есть простая асинхронная функция, которая отлично работает.Но мне нужно знать, что возвращает каждый рекурсивный вызов, поэтому я добавил then (см. Строку (*)).К сожалению, result в таких then равно undefined, и результатом всей функции становится также undefined.

async function foo(n) {
    try {
        if (n == 0) {
            return 0;
        }
        return n + await foo(n - 1)
            .then(result => { bar(); }); // (*)
    }
    catch (e) {
        console.log(e);
    }
}

Почему это then нарушает функцию?Должен ли я использовать что-то еще?

1 Ответ

0 голосов
/ 30 января 2019

Так работает then - это создает новое обещание для результата обратного вызова.Ваш result => { bar(); } обратный вызов не return ничего, поэтому вы получите undefined в результате.Вам нужно было бы написать

return n + await foo(n - 1).then(result => { bar(); return result; });
//                                                  ^^^^^^^^^^^^^^

, но на самом деле вы не должны смешивать then обратные вызовы в async / await коде.Эквивалент этого исправленного кода будет

const result = await foo(n - 1);
bar();
return n + await result; // (the `await` is unnecessary and should be left out)

, тогда как ваш исходный код будет

const result = await foo(n - 1);
bar();
return n + await undefined;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...