开发者问题收集

如何在 js 中实现去抖动

2019-11-02
119

我在 Vuejs 中有一个类似下面的函数。

单击按钮时,'start()' 会运行,并且函数 rn() 也会运行。
但是,只需单击一次按钮,' const 命令' 就会在 0.1 秒、3 秒、2 秒或 2 秒内发生变化。
也就是说,'按钮' 只被单击一次,但 '命令' 在短时间内发生了很大变化。
但是,当命令的更改时间不超过 3 秒时,我希望 Axios 帖子能够运行。
尽管我尝试使用 Lodash 防抖,但我还没有找到解决方案。
你能帮我解决这个问题吗?非常感谢你的阅读。

<template>
    <button @click="start()">Start</button>
</tempalte>

methods:{
    start() {
        ..
        ..
        ..
        function rn() {
           const command = something..
           ..
           axios.post('localhost:4000', {data: command})
        }
    }
}
1个回答

用幼稚的方式去做。

const ELAPSE_TIME = 3000; // 3 second
let oldCommand;
let lastTime;

function update() {
   if (buttonIsPressed) {
       const command = getCurrentCommand();

       if (command !== oldCommand) { // command has changed
           lastTime = new Date().getTime();
       } else { // command has not changed
           let now = new Date().getTime();
           let duration = now - lastTime;

           if (duration > ELAPSE_TIME) { // already 3 second
               postUpdate();
               lastTime = now - ELAPSE_TIME;
           }
       }
   }
}


setInterval(update, 100);
Daniel Tran
2019-11-02