gpt4 book ai didi

javascript - 在触发多个更改时仅运行一次昂贵的代码

转载 作者:行者123 更新时间:2023-11-30 08:33:43 26 4
gpt4 key购买 nike

我有一些输入对象。

我有一个代码可以在它们发生变化时执行某些操作 -

for (var i=0; i<100; ++i)
my_inputs[i].on('change', function() {
showValue($(this).val()); // Display the value it changed to
someExpensiveOperation(); // A common refresh for any change
});

我想将它们全部重置为 0。

for (var i=0; i<100; ++i) {
my_inputs[i].val(0);
my_inputs[i].change(); // Calls someExpensiveOperation 100 times!
}

重新设计代码以防止在手动重置值时调用刷新的好方法是什么? promises/deferred 在这里有帮助吗?

最佳答案

您可以消除对 someExpensiveOperation() 的调用:

 var someExpensiveOperationDebouncing = 0;

function debouncedSomeExpensiveOperation() {
if (someExpensiveOperationDebouncing) {
return;
}

// wait at least 1/4 second before calling someExpensiveOperation again
++someExpensiveOperationDebouncing;
setTimeout(function () {
--someExpensiveOperationDebouncing;
}, 250);

someExpensiveOperation.apply(this, arguments);
}

另请查看 lodash 的 _.debounce(func, [wait], [options]) .

关于javascript - 在触发多个更改时仅运行一次昂贵的代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34233157/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com