如何延迟函数执行

How to delay a function excecution

我有这种情况,我正在构建一个购物车,每次添加产品或更改数量时我都需要发出一个http请求。

我有一个按钮可以将 1 件产品添加到购物车,它假设添加的每个产品都应该发出 http 请求,但我想避免一次拨打多个电话...所以我想为请求设置超时,但如果在 3 秒内用户再次点击,那么我应该取消最后一个使用旧数据的请求,然后为使用新数据的请求设置一个新的超时。

所以我想到了这个解决方案

function doRequest(){
  clearTimeout(state.request);
  state.request = setTimeout(updateCartService, 180);      
}

该函数位于另一个函数内,该函数检索 state 对象(变量和数据在所有应用程序中持久存在的集合)。 updateCarteService 函数包含 http 请求。

但是所有的请求仍在进行中,如果我点击触发doRequest的按钮5次,调用我被执行了5次。

是否知道可能出现的问题或实现我的目标的更好方法?

如果有帮助,我正在使用 vueJs、vuex (flux) 构建网站,并且此代码在一个动作中。

setTimeout 需要毫秒,所以你设置超时为180 毫秒,太短了,例如尝试3000。这是一个小的 jsfiddle 示例。

https://jsfiddle.net/ShinShil/5fw2c63o/

var timeout;
$('#click').click(function() {
    clearTimeout(timeout);
  timeout = setTimeout(setText, 3000);
});

function setText() {
    $('#text').append('text');
}