Javascript 递归承诺赢得';不执行

Javascript 递归承诺赢得';不执行,javascript,recursion,promise,Javascript,Recursion,Promise,在一段代码中(很简单,我移动了实际的负载,并用一个时间代替了它),我希望承诺会递归发生: const all_related = []; const createSub = async function(maxNum, depth) { if (depth > 0) { const n = 0; console.log(`depth: ${depth}`); const id = depth*maxNum + n + 1; console.log(`i

在一段代码中(很简单,我移动了实际的负载,并用一个时间代替了它),我希望承诺会递归发生:

const all_related = [];
const createSub = async function(maxNum, depth) {
  if (depth > 0) {
    const n = 0;
    console.log(`depth: ${depth}`);
    const id = depth*maxNum +  n + 1;
    console.log(`id: ${id}`);
    try {
      const promise = new Promise(resolve => {
        setTimeout(resolve, 10, this);
      });
      await promise;
      all_related.push(id);
      console.log('after');
    } catch (err) {
      console.log(err);
    }
    createSub(maxNum, depth - 1);
  }
};
try {
  await createSub(1, 2);
} catch(err) {
  console.log(err);
}
console.log(all_related);
该函数应该很清楚:它基本上是基于以前的承诺创建承诺,直到它用完
深度

最后一个数组(
all_related
)我希望是
[3,3]
。此外,我希望日志如下所示:

depth: 2
id: 3
after
depth: 1
id: 2
after
[ 3, 2 ]
然而,我看到的日志是:

depth: 2
id: 3
after
depth: 1
id: 2
[ 3 ]
也没有任何错误日志记录,也没有任何报告。-因此,这表明第二个“深度”承诺根本没有执行。-为什么会这样?函数被执行(我看到
id:2
),它只是在第二次承诺时完全退出


哦,我该如何解决这个问题呢?

您没有在等待递归调用,因此原始调用在该调用之前完成

await createSub(maxNum, depth - 1);
下面是一个演示:

const all_related=[];
const createSub=异步函数(maxNum,depth){
如果(深度>0){
常数n=0;
log(`depth:${depth}`);
const id=深度*maxNum+n+1;
log(`id:${id}`);
试一试{
常量承诺=新承诺(解析=>{
setTimeout(解析,10,此);
});
等待承诺;
所有相关推送(id);
console.log('after');
}捕捉(错误){
控制台日志(err);
}
等待createSub(最大值,深度-1);
}
};
异步函数测试(){
试一试{
等待createSub(1,2);
}捕捉(错误){
控制台日志(err);
}
}

test()你不需要让“递归”调用成为
等待createSub(…)
?我会记住这个提示-虽然这段代码基本上是一个集成测试的设置(填充一个db并在它们之间创建链接),所以不是为了优化。