Как я могу заставить функцию выполняться каждый раз, когда она получает выходные данные от другой функции? (NodeJS) - PullRequest
0 голосов
/ 28 января 2020

У меня есть некоторый псевдокод ниже:

function generateNumber() {
  const n = Math.floor(Math.random() * 15);
  console.log('Original Number')
  console.log(n)
  return {
    n
  };
}

function loop() {
  const rand = Math.round(Math.random() * (4000 - 600)) + 600;
  setTimeout(() => {
    generateNumber();
    add_1();
    loop();

  }, rand);
}

function add_1() {
  const x = generateNumber() + 1;
  console.log('New Number')
  console.log(x)
}

loop()

Я хочу, чтобы add_1() выполнялся каждый раз, когда generateNumber() выводит число. Итак, на данный момент generateNumber() выведет значение, и оно сразу перейдет к add_1(), где значение 1 добавляется к входящему номеру, который затем отправляется обратно. Функция loop() предназначена только для получения generateNumber() для непрерывного вывода значений в разное время. Но на самом деле может случиться так, что я хочу, чтобы датчик предоставлял данные, и каждый раз, когда он отправляет значение, я хочу, чтобы данные go передавались в функцию (т. Е. add_1()).

Является ли мой единственный вариант иметь вместе generateNumber() и add_1() в функции? (Как в случае с псевдокодом выше)

Я хочу, чтобы add_1() выполнялся каждый раз, когда получал ввод. Желательно, без необходимости add_1(), чтобы быть в функции, или l oop, с generateNumber().

Я предполагаю, что add_1() должна быть асинхронной c функцией и должен ждать какого-то обещания от generateNumber().

В коде вы можете видеть, что нет ничего, что "запускало бы" add_1() для выполнения, поэтому я считаю, что мой вопрос заключается в том, как создать этот «триггер» основан на выводе из generateNumber().

1 Ответ

1 голос
/ 28 января 2020

Патч обезьян generateNumber().

var oldGenerateNumber = generateNumber;
generateNumber = function() {
    const ret = oldGenerateNumber();
    add_1();
    return ret;
};    
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...