我希望将来在用户更改参数时触发5分钟的昂贵API调用。如果用户在10秒后再次更改参数我不想在4分50秒内拨打电话而在5米内拨打电话,我想在4分50秒内取消呼叫,因为它没有实际意义。
我发现lodash中的debounce会在调用之前强制执行最短时间,但是它不会取消任何挂起但未执行的调用,所以当它阻止快速调用时它仍然会进行不必要的调用,所以现在就是这样了。有什么干净的想法吗?
答案 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);