Как узнать, что какая-то функция вызвана/запущена?

Есть функция func1, которая должна как-то проверять статус функции func2. Как это сделать?
func1 запускается первой, и косвенно участвует в запуске func2.

Схема:
func1 --> Черный ящик --> func2

function func1() {
if func2 запущена, то..
}

function func2() {
func1 меня вызвали!
}

Нужна не проверка, а какое-то прослушивание.
  • Вопрос задан
  • 347 просмотров
Решения вопроса 2
rockon404
@rockon404
Frontend Developer
Если надо следить за вызовами функции, то можно использовать декоратор:
function decorator(f) {
  return function() {
    f.apply(this, arguments);
    console.log(f.name + ' is called!');
  }
}

function foo() {
  console.log('I am foo!');
}

const bar = decorator(foo);

bar();  // I am foo! \n foo is called!


Если нужен флаг, то можно использовать свойства функции:
function foo() {
  foo.isRunning = true;
  // do something
}

function bar() {
  if (!foo.isRunning) {
    return foo();
  }
  // do something other
}
Ответ написан
Tolly
@Tolly Автор вопроса
Вопрос закрываю, так как я так понял, что решения - нет,
кроме как по timeout, т.е. самозапуск функции с интервалом по времени.
Если, решение есть, пишите отмечу решением.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
alexey-m-ukolov
@alexey-m-ukolov Куратор тега JavaScript
Если код полностью синхронный:
var flag = false;

function func1() {
  if (Math.random() > 0.5) {
    func2();
  }

  if (flag) {

  }
}

function func2() {
  flag = true;
}


Если есть асинхронность, то нужно смотреть на реальный код и, возможно, его переделывать.
Ответ написан
Комментировать
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
ЕМНИП, JavaScript - однопоточный, с очередью выполнения для событий. Значит две функции не могут быть вызваны одновременно.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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