Рекурсивная функция разрешается только если она запускается один раз - PullRequest
0 голосов
/ 19 марта 2019

У меня есть рекурсивная функция, которая вызывает себя.Потому что это в обещании, когда я снова его называю, цепочки обещаний, и кажется, что я не могу выйти, хотя я и возвращаю его.Вот моя функция ...

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 ]

1 голос
/ 19 марта 2019

Вопрос в том, нужно ли вам создавать несколько Обещаний? Если нет, то создайте одно обещание и получите внутреннюю функцию, которая действует как рекурсивная функция.

function recursive(depth = 0, maxDepth = 5)
{

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

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

  return new Promise((resolve, reject)=>{
       inner(resolve);    
  });
}

recursive().then(depth=>console.log(depth))
0 голосов
/ 19 марта 2019

вам не хватает разрешения для первого звонка.вместо 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();});
});
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...