递归函数仅在运行一次时才解析

时间:2019-03-19 15:27:58

标签: javascript recursion promise

我有一个调用自己的递归函数。因为它是在承诺中,所以当我再次调用它时,承诺链就连我都无法退回,即使我退还了它。这是我的功能...

let depth = 0;
const maxDepth = 1;

main();

function main()
{
    reccursive.then(
    function(response)
    {
        console.log('all finished!');
    });
}

function reccursive()
{
  return new Promise((resolve, reject)=>
  {
        console.log('in recursive function');

        if (depth === maxDepth)
        {
            console.log('hit max depth');
            return resolve();
        }

        console.log('not max depth, increasing');
        depth++;

        return reccursive();
  });
}

如果最大深度为0,它将运行一次,然后解决。

2 个答案:

答案 0 :(得分:1)

问题是,您需要创建多个Promises吗?如果不是,则创建一个Promise,并具有一个类似于递归函数的内部函数。

graph4.ejs

答案 1 :(得分:0)

您缺少首次通话的解决方法。代替return reslove()使用 reccursive().then(function(){ resolve();});

let depth = 0;
const maxDepth = 1;

main();

function main()
{
reccursive.then(
  function(response)
 {
    console.log('all finished!');
 });
}

function reccursive()
{
 return new Promise((resolve, reject)=>
{
    console.log('in recursive function');

    if (depth === maxDepth)
    {
        console.log('hit max depth');
        return resolve();
    }

    console.log('not max depth, increasing');
    depth++;

    reccursive().then(function(){ resolve();});
});
}