Задать вопрос
Demigodd
@Demigodd

Как изменить значение переменной после окончания рекурсивных вызовов setTimeout?

variable = false;

function aaa() {
  bbb();
  variable = true;
}

function bbb() {
  if(//expression exit) return;
  SetTimeout(bbb, 2000);
}

aaa();  // call main function


Дело в том что если вызвать 1ую функцию он пойдет вызовет 2ую и не подождав, сделает переменную variable = true;

Какие способами можно подождать выполнений функций bbb и после него сделать переменную true ?
Просто дело в том что рекурсивный вызов 2-ой функций рандомный, может вызваться 5, 10 или 20 раз.
  • Вопрос задан
  • 181 просмотр
Подписаться 1 Средний Комментировать
Решения вопроса 2
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
Вы, кажется, не понимаете асинхронной работы в JS. Функция SetTimeout не ждёт указанное время (у вас 2 секунды). Она настраивает таймер и сразу же возвращается. Указанная в SetTimeout функция через указанное время будет поставлена в очередь вызовов JS и запущена, когда до неё дойдёт очередь.
Таким образом, функция bbb, вызванная из aaa завершится практически сразу же. Вы можете записать так:
function bbb() {
  if(...) {
    variable = true;
    return;
  }
  SetTimeout(bbb, 2000);
}

Но переменная изменится только по срабатыванию условия, когда функция aaa давно уже завершится.
Ответ написан
Комментировать
@edk55
Возвращайте из функции bbb промис.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

Похожие вопросы