@pacan4ik

Как остановить рекурсивную функцию в функции?

Есть функция, которая запускает функцию с рекурсией, та в свою очередь запускает дерево рекурсий
Но в один момент мы получили результат и хотим прекратить все это безобразие и вывести результат в основной функции
Как это сделать?
https://jsfiddle.net/k7sutj8d/
  • Вопрос задан
  • 107 просмотров
Решения вопроса 2
@alekcena
Нелинейный наставник
Рекурсия это синхронная операция. Значит нам в этом дереве нужно каждый раз ожидать есть ли операция.
function startRec(){
let first = firstRecur();// первая рекурсия
if(first =="получили значение") return first;
let second = secondRec()// И тд
}
Ответ написан
Комментировать
Aleksandr-JS-Developer
@Aleksandr-JS-Developer Куратор тега JavaScript
Лучше проще, чем никогда
Но в один момент мы получили результат и хотим прекратить все это безобразие и вывести результат в основной функции

Я, для таких случаев, выношу объект за пределы рекурсии, и в рекурсивных функциях, перед выполнением, идёт проверка поля из объекта.

Как-то так:
function main () {
  const state = {
    hasResult: false,
    res: null
  }

  const recFoo = p => {
    if(state.hasResult) return; // или так: if(state.res !== null) return;
    // ...
    // Как только понимаем, что есть результат,
    // то пишем его в state.res и меняем флаг state.hasResult на true
    // ...
  }

  recFoo();

  return state.res;
}
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы