安排javascript以后的通话并取消所有待处理的通话

时间:2017-05-26 10:47:10

标签: javascript

我希望将来在用户更改参数时触发5分钟的昂贵API调用。如果用户在10秒后再次更改参数我不想在4分50秒内拨打电话而在5米内拨打电话,我想在4分50秒内取消呼叫,因为它没有实际意义。

我发现lodash中的debounce会在调用之前强制执行最短时间,但是它不会取消任何挂起但未执行的调用,所以当它阻止快速调用时它仍然会进行不必要的调用,所以现在就是这样了。有什么干净的想法吗?

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

1 个答案:

答案 0 :(得分:1)

来自debounce文档:

  

debounced函数附带一个cancel方法来取消延迟的func调用

因此,请确保在使用更改的参数重新调用method.cancel之前调用method

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);