如何延迟功能优先

时间:2016-08-10 22:09:26

标签: javascript http timer vue.js flux

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

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

所以我提出了这个解决方案

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

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

然而,所有请求仍在进行中,如果我点击触发doRequest的按钮5次,则该呼叫将被激活5次。

知道可能出现什么问题,或者知道更好的方法来实现我的目标吗?

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

1 个答案:

答案 0 :(得分:0)

setTimeout需要几毫秒,所以你将timout设置为180ms,它太短,例如尝试3000。这里有一个小小的例子。

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

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

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