Lodash 油门多次点火

问题描述 投票:0回答:3

我正在使用这样的lodash节流阀

const throttledFetch = _.throttle(fetch, 10000, { 'leading': false });

我需要在从 ws.get() 收到的某个通知事件上触发此操作。所以我们的想法是,如果我几乎同时收到 10 个通知,则让

fetch
函数在等待 10 秒后仅触发一次。

相反,在 10 秒延迟后,获取函数被触发 10 次。

我该如何解决这个问题?我可以使用任何其他方法。

有任何建议都欢迎

javascript reactjs lodash throttling
3个回答
2
投票

节流函数应该在重新渲染之间保持不变,这意味着我们必须使用 React 的 UseCallback 函数。如果你改变的话,这会起作用:

const throttledFetch = _.throttle(fetch, 10000, { 'leading': false });

const throttledFetch = useCallback(_.throttle(fetch, 10000, { 'leading': false }), []);

0
投票

为调用保留一个计数器,并检查它是否仅调用一次。


0
投票

如果我们只调用

fetch
函数一次,同时对于所有 N 个请求,我们应该使用
debounce
而不是
throttle
。这是响应用户交互/来自 Web 套接字侦听器的某些事件的最佳方式。

响应要快,也不宜频繁调用。为了完全满足上述要求,我会选择

_debounce

正如上面答案中

Tuxedo Joe
所回答的那样,我们可以采用
useCallback
方法,因为参考在重新渲染之间将保持不变。

const asyncFetch = useCallback(_.debounce(fetch, 10000, { 'leading': false }));

© www.soinside.com 2019 - 2024. All rights reserved.