【发布时间】:2023-08-25 18:51:01
【问题描述】:
我正在尝试debounce 一个save 函数,该函数将对象保存为在击键时触发的自动保存的参数。 debounce 会阻止保存的发生,直到用户停止输入,或者至少是这样的想法。比如:
var save = _.debounce(function(obj) {
...
}, delay);
如果我尝试快速连续保存两个对象,这就会崩溃。因为去抖动没有考虑传入的对象,所以只有第二次调用 save 会触发并且只有一个对象会被保存。
save(obj1);
save(obj2);
例如,只会保存obj2。
我可以使obj 成为一个类的实例,该类具有自己的save 方法,该方法负责将去抖动保存到该对象。或者在某处保留一个部分/咖喱函数列表,但我希望那里有一个一站式解决方案。类似的东西:
var save = _.easySolution(function(obj) {
...
}, delay);
我正在寻找以下保存字符串来保存每个对象,但每个对象只保存一次。
save(obj1);
save(obj2);
save(obj3);
save(obj2);
save(obj2);
save(obj3);
save(obj2);
save(obj1);
编辑:像这样的东西,也许只是不那么复杂,并且不会用__save 函数改变obj 的东西?
function save(obj) {
if(!obj.__save) {
obj.__save = _.debounce(_.partial(function(obj) {
...
}, obj), delay);
}
obj.__save();
}
【问题讨论】:
-
连读两遍也无法得到问题,但似乎你想要
.bind() -
听起来你实际上并不想去抖动。
-
@zerkms 试图澄清。
-
@FelixKling 这有点像反跳。使用去抖动,如果大量的保存被快速连续触发(
obj1。 -
所以你需要每个对象去抖动?它实际上看起来像是 RxJS(或任何其他反应式编程库)与
.Distinct()运算符结合 debounce 的工作。 (其实并没有我刚才说的那么简单,不过我觉得还是直接用Rx)
标签: javascript underscore.js lodash