JS中的油门:为什么在控制台中我只看到第一个也是最后一个输出?



>只看到函数调用的第一个也是最后一个输出。为什么?以及如何查看每个函数在 1000ms 周期内的输出?

使用洛达什油门。

const f = function (a) {
console.log(a);
};
let f1000 = _.throttle(f, 1000);
f1000(1);
f1000(2);
f1000(3);
f1000(4);
f1000(5);

首先,您必须了解超时有两个时刻leadingtrailing。第一个是超时的"开始",第二个是超时的"结束"。

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

最新更新