我正在尝试使用JavaScript中的async / await编写递归函数。 这是我的代码:
async function recursion(value) {
return new Promise((fulfil, reject) => {
setTimeout(()=> {
if(value == 1) {
fulfil(1)
} else {
let rec_value = await recursion(value-1)
fulfil(value + rec_value)
}
}, 1000)
})
}
console.log(await recursion(3))
但我有语法错误:
let rec_value = await recursion(value-1)
^^^^^^^^^
SyntaxError: Unexpected identifier
答案 0 :(得分:5)
您尚未将setTimeout
处理程序声明为async
,因此编译器无法识别await
关键字。从它的外观来看,你实际上并不需要它在顶级,所以你可以更新为:
function recursion(value) {
return new Promise((resolve, reject) => {
setTimeout(async () => {
// use await keyword
});
});
}
答案 1 :(得分:1)
我按如下方式编写代码:
const timeout = ms => new Promise(resolve => setTimeout(resolve, ms));
async function recursion(value) {
if (value === 0) return 0;
await timeout(1000);
return value + await recursion(value - 1);
}
(async () => console.log(await recursion(3)))();