JavaScript中的递归异步函数

时间:2017-09-15 15:03:10

标签: javascript node.js asynchronous recursion async-await

我正在尝试使用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

2 个答案:

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