2017-09-15 113 views
0

我想在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 
+0

可能重复? https://stackoverflow.com/questions/33289726/combination-of-async-function-await-settimeout –

回答

2

我如下会写代码:

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)))();

2

您还没有宣布你setTimeout处理程序async因此编译器无法识别的await关键字。从外观上来看,你实际上并不需要在顶层,所以你可以更新为:

function recursion(value) { 
    return new Promise((resolve, reject) => { 
     setTimeout(async() => { 
      // use await keyword 
     }); 
    }); 
}