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
次のようにコードを記述します。
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
});
});
}