>只看到函数调用的第一个也是最后一个输出。为什么?以及如何查看每个函数在 1000ms 周期内的输出?
使用洛达什油门。
const f = function (a) {
console.log(a);
};
let f1000 = _.throttle(f, 1000);
f1000(1);
f1000(2);
f1000(3);
f1000(4);
f1000(5);
首先,您必须了解超时有两个时刻:leading
和trailing
。第一个是超时的"开始",第二个是超时的"结束"。
从lodash
文档中:
注: 如果前导和尾随选项为 true,则仅当在等待超时期间多次调用受限制的函数时,才会在超时的后沿调用
func
。
默认情况下,它们是 true,正如您在此处的实现中看到的那样。这意味着,当多次调用同一个受限制的函数时,它将在超时开始之前调用一次,在超时结束后调用一次。
另外,请注意文档中的以下内容:
对受限制函数的后续调用将返回上次
func
调用的结果。
因此,您的代码片段会打印第一次调用,因为您多次调用受限制的函数,并且它是超时的前缘,不会调用任何其他内容,因为它受到限制,最后返回最新调用的结果。
它会限制在调用第一个请求(打印1
(后在指定间隔内出现的所有请求,后续调用仅在间隔结束后返回最后一次调用(打印5
(的结果。所以,如果你只是做这样的事情,你会看到每个值都被打印出来。
const f = function (a) {
console.log(a);
};
let f1000 = _.throttle(f, 1000);
setTimeout(()=>f1000(1), 1000)
setTimeout(()=>f1000(2), 2000)
setTimeout(()=>f1000(3), 3000)
setTimeout(()=>f1000(4), 4000)
setTimeout(()=>f1000(5), 5000)
或者,如果您只是将限制时间减少到 0 毫秒,它将打印所有值。
const f = function (a) {
console.log(a);
};
let f1000 = _.throttle(f, 0); //reduce throttle to 0
f1000(1);
f1000(2);
f1000(3);
f1000(4);
f1000(5);
当我在函数中放置调试器并保持开发工具打开时,我得到了这个线索。在这种情况下,它打印每个数字(因为每次调用都有足够的延迟(。你也可以自己看到这一点。
const f = function (a) {
debugger;
console.log(a);
};
另外,您可能想阅读文档:https://lodash.com/docs/4.17.15#throttle