我有一个简单的异步函数,可以很好地工作。但是我需要知道每个递归调用返回的内容,因此我添加了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
为什么会破坏功能?我应该再使用其他东西吗?
答案 0 :(得分:2)
这就是then
的工作方式-它为回调的结果创建了一个新的Promise。您的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;