JavaScript中的递归异步函数
问题描述:
我想在JavaScript中使用async/await编写递归函数。 这是我的代码:JavaScript中的递归异步函数
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
答
我如下会写代码:
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)))();
答
您还没有宣布你setTimeout
处理程序async
因此编译器无法识别的await
关键字。从外观上来看,你实际上并不需要在顶层,所以你可以更新为:
function recursion(value) {
return new Promise((resolve, reject) => {
setTimeout(async() => {
// use await keyword
});
});
}
可能重复? https://stackoverflow.com/questions/33289726/combination-of-async-function-await-settimeout –