我如何缓慢完成节点 JS 事件侦听器?

How do I slow done a node JS event listener?

我正尝试在我的代码中使用无线控制器。我正在使用节点 HID,目前只是尝试编写一些代码,当第一次按下按钮时输出 "Tap" 并在第二次按下时输出 "untap" 。我面临的唯一问题是单次点击会触发两个 if 语句,因为侦听器事件刷新得太快了。有什么办法可以减慢速度吗?

    device.on ("data", function (data){

        if (data[4]===31&&(!pressed)){

            device.pause();
            console.log("tap");

            pressed=true;

        }

        if (data[4]===31&&(pressed)){

            device.pause();

            console.log("untap");

            pressed=false;

        }



    device.resume();
    console.log(data[4]);
    console.log(pressed);

    });

(pressed是前面声明的变量)

改用else if。目前,如果满足第一个 if,则将 pressed 设置为 true,但如果满足第一个 if,则设置下一个

if (data[4]===31&&(pressed)){

将是 true,因为 data[4] === 31(因为第一个 if 已满足) 您刚刚设置 pressedtrue.

这会将日志从 tap, untap, tap, untap, tap, untap, tap, untap 减少到 tap, untap, tap, untap,但听起来 data 事件也被一次点击触发了两次,所以稍微添加一点再次调用监听主体之前的延迟:

let lastDataCall = 0;
device.on("data", function(data) {
  const now = Date.now();
  if (now - lastDataCall < 20) { // 20 milliseconds
    return;
  }
  lastDataCall = now;
  if (data[4] === 31) {
    device.pause();
    if (!pressed) {
      console.log("tap");
      pressed = true;
    } else if ((pressed)) {
      console.log("untap");
      pressed = false;
    }
  }
  device.resume();
  console.log(data[4]);
  console.log(pressed);
});

(如果您在 data 处理程序中拥有的唯一代码与 tapping/untapping 相关,您可以 trim 尽早 returning if data[4] !== 31, 它可能会使代码更具可读性)