Так работает 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;