2017-09-15 71 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 
     }); 
    }); 
}