我下面有一些伪代码:

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()在不同时间连续输出值。但实际上可能是我希望传感器提供数据,并且每次传感器发送一个值时,我都希望数据进入函数(即add_1())。

我唯一的选择是在函数中同时包含generateNumber()add_1()吗? (上面的伪代码就是这种情况)

我希望它使add_1()每次获得输入时都执行。优选地,不需要add_1()generateNumber()处于函数或循环中。

我的猜测是add_1()必须是一个异步函数,并且必须等待generateNumber()的某种承诺。

您可以在代码中看到,没有什么可以“触发” add_1()来执行的,所以我相信我的问题是如何基于generateNumber()的输出来创建此“触发”。

最佳答案

猴子补丁generateNumber()

var oldGenerateNumber = generateNumber;
generateNumber = function() {
    const ret = oldGenerateNumber();
    add_1();
    return ret;
};

10-06 05:48