如何实现类似节流阀的功能,但又不会浪费时间

 收藏

我想实现一个类似于lodash的节流阀的辅助函数,但仅在最后一次调用结束时才调用传递的回调(如果没有,则将新调用延迟到那时),而不要像“每x毫秒调用一次”这样的规则。

最好的方法是什么?谢谢。

回复
  • 尝试使用布尔变量像

    var running = false;
    

    use setInterval or similar function and put condition if(!running){} for statements to be performed. if statement is going to run then make running = true.

  • 因此,您最终想要的是将函数调用排队,然后从堆栈中调用它们。

    // keep a stack of inputs for the function calls
    var stack = [], 
        timer = null;
    
    function process() {
        var item = stack.shift();
        //
        // process the item here
        //
        if (stack.length === 0) {
            clearInterval(timer);
            timer = null;
        }
    }
    // every time you call the function on event. instead of calling the processing function
    // call this to add it in a queue
    function queue(item) {
        stack.push(item);
        if (timer === null) {
            timer = setInterval(process, 500);
        }
    }

    您可以使此函数适用于多种类型的调用。 //使用项目作为决定因素

    // keep a stack of inputs for the function calls
    var stack = [],
      timer = null;
    function reset(item){
        // reset item here
    }
    function process() {
      var item = stack.shift();
      //
      // process the item here
      //
      switch (item.call) {
        case 'reset':
             reset(item);
          break;
        case 'stop':
    //         stop(item);
          break;
        default:
          // code block
          // deal with it
      }
      if (stack.length === 0) {
        clearInterval(timer);
        timer = null;
      }
    }
    // every time you call the function on event. instead of calling the processing function
    // call this to add it in a queue
    // for hybrid calls 
    // use item = {'call': 'reset', 'data': item}
    function queue(item) {
      stack.push(item);
      if (timer === null) {
        timer = setInterval(process, 500);
      }
    }