Javascript 如何调度具有延迟的操作(去盎司)

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

我有一个场景,我需要在输入完成两秒钟后发送一个操作。(假设一个用户键入1000时没有2秒的间隔,因此我只需要在键入1000后以及距键入1000 2秒后发送操作)

以前我经常做这样的事情,需要从API中获取下拉列表,但为此,我直接使用带有AJAX组件调用的库。它工作正常

现在我需要发出这样的行动

  // 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秒内最后一次输入的值来调度操作。