2017-05-26 77 views
0

我期待做一个昂贵的API调用计划在将来5分钟触发用户更改参数。如果用户在10秒钟后再次更改参数,我不希望在4m50s内拨打电话,在5m内拨打电话,因为我们基本上没有实际意义,所以我希望在4m50s内取消呼叫。安排一个JavaScript的未来呼叫,并取消任何未决呼叫

我发现lodash在执行调用前的最短时间内发生了debounce,但它不会取消任何挂起但未执行的调用,因此它可以防止快速调用,但它仍然会执行不必​​要的调用,所以现在完全是这样。任何干净的想法做到这一点?

https://lodash.com/docs/4.17.4#debounce

回答

1

debounce文档:

去抖动功能配备了cancel方法来取消延迟FUNC调用

因此,只要确保你重新调用之前调用method.cancelmethod改变参数:

var debounced = _.debounce(api_func, 5 * 60 * 1000, { trailing: true }); 

,并在触发器处理程序(其必须具有在其范围内上述可变debounced访问):

debounced.cancel(); 
debounced(params); 

可替换地,只使用内置的定时器功能,其中溶液应该平凡是:

var timer; 

,并在触发:

clearTimeout(timer); 
timer = setTimeout(api_func, 5 * 6 * 1000); 
+0

@ ss2k您使用了上述两种方法中的哪一种? – Alnitak

+0

我已经对lodash有依赖关系,所以去掉了。 – ss2k