Javascript 如何调度具有延迟的操作(去盎司)
我有一个场景,我需要在输入完成两秒钟后发送一个操作。(假设一个用户键入1000时没有2秒的间隔,因此我只需要在键入1000后以及距键入1000 2秒后发送操作) 以前我经常做这样的事情,需要从API中获取下拉列表,但为此,我直接使用带有AJAX组件调用的库。它工作正常 现在我需要发出这样的行动Javascript 如何调度具有延迟的操作(去盎司),javascript,reactjs,redux,promise,debounce,Javascript,Reactjs,Redux,Promise,Debounce,我有一个场景,我需要在输入完成两秒钟后发送一个操作。(假设一个用户键入1000时没有2秒的间隔,因此我只需要在键入1000后以及距键入1000 2秒后发送操作) 以前我经常做这样的事情,需要从API中获取下拉列表,但为此,我直接使用带有AJAX组件调用的库。它工作正常 现在我需要发出这样的行动 // should be dispatched only for the last request const getRateReq = dispatch(getRates()); cons
// should be dispatched only for the last request
const getRateReq = dispatch(getRates());
const getRate = debounce(getRateReq, 2000, {
leading: false,
});
const onChange = (e) => {
setValue(e.target.value);
getRate(e.target.value);
}
现在,操作仅在完成键入两秒钟后发送。但随后它会发出1、10、100、1000的所有请求(即使输入1000时没有两秒钟的间隔)。如何修复此问题并仅为2秒内的最后一次输入发送操作
任何帮助都将不胜感激。谢谢
编辑:添加了基本的onChange函数您需要使用loadash的去盎司方法并执行以下操作:
onChange = debounce(anyInput => {
}, 2000);
因此,您必须在完成键入后2秒在onchange方法内进行API调用。
不确定这就是你要问的吗?你可以这样做
let timeOut = null;
SearchFilter: (name, value) => {
clearTimeout(timeOut);
dispatch(SearchFilter(name, value));
timeOut = setTimeout(() => {
dispatch(callfunction());
}, 2000);
}
它将调度等待2秒钟输入的操作。我将尝试此操作。顺便说一句,我需要的是在2秒内对最后一个输入发送一个操作。因此,如果用户仅键入1并等待2秒,则应调度操作。如果用户输入100,且两次操作之间没有2秒的延迟,则该操作应仅为100(而不是1或10)。这就是我想要的。顺便说一句,谢谢这正是这个方法的工作原理。它在指定的秒数内等待输入的更改,然后仅在2秒后应用。如果您立即输入100而没有延迟,它将只运行100,而不运行1和10。谢谢。我试试这个。顺便说一句,我需要的是在2秒内对最后一个输入发送一个操作。因此,如果用户仅键入1并等待2秒,则应调度操作。如果用户输入100,且两次操作之间没有2秒的延迟,则该操作应仅为100(而不是1或10)。这就是我想要的。你可以在onchange函数中添加延迟,但是值也会随着延迟而改变,对吗?但我需要的是立即更改值(在onChange函数上),但仅在2秒内为最后一次输入分派操作。最后一次输入的标准是什么?你怎么知道这是最后一次输入?如果输入在两秒钟内没有改变,那么动作应该被调度。e、 g:1)键入
1
并等待2秒,应调度操作。2) 键入1
,然后键入0
(10),无需2秒钟,中间无任何延迟,然后等待2秒钟。然后,应该为10
的值调度操作,因此,应该考虑到间隔2秒内最后一次输入的值来调度操作。