Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
排队和;超时“;JavaScript中的异步函数调用_Javascript_Reactjs_Asynchronous_Promise - Fatal编程技术网

排队和;超时“;JavaScript中的异步函数调用

排队和;超时“;JavaScript中的异步函数调用,javascript,reactjs,asynchronous,promise,Javascript,Reactjs,Asynchronous,Promise,我正在用mobx为我的react web应用程序制作一个API客户端,它可以用关键字查询服务器的搜索结果 现在为了让用户体验更好,我想实现一个即时搜索功能,比如谷歌的搜索框,它不断发送服务器查询并不断更新搜索结果 现在,每当输入字段的状态发生变化时,我都会天真地向服务器发送一个新请求。但是,这不是很有效,如果用户快速键入长查询,可能会导致服务器崩溃。一个30个字符的搜索查询将向服务器发送30个请求,如果我不等待这些请求在客户端依次解析,则传递到搜索结果字段的最终结果不能保证是正确的。(当上一个请

我正在用mobx为我的react web应用程序制作一个API客户端,它可以用关键字查询服务器的搜索结果

现在为了让用户体验更好,我想实现一个即时搜索功能,比如谷歌的搜索框,它不断发送服务器查询并不断更新搜索结果

现在,每当输入字段的状态发生变化时,我都会天真地向服务器发送一个新请求。但是,这不是很有效,如果用户快速键入长查询,可能会导致服务器崩溃。一个30个字符的搜索查询将向服务器发送30个请求,如果我不等待这些请求在客户端依次解析,则传递到搜索结果字段的最终结果不能保证是正确的。(当上一个请求的解析时间晚于最新请求时)

是否有一种好的方法和策略来“排队”搜索调用,只在队列顶部(比如200毫秒)触发一个新请求,并超时/放弃所有其他过时的搜索调用?当用户停止输入50毫秒时,可能还会发送请求

因此,假设用户在300毫秒内键入查询,那么只会有两个调用:第一个是在他/她开始搭售200毫秒后半完成的查询,第二个是在350毫秒,在他/她结束键入50毫秒后

例如:

// the search function that I want to queue
async function searchFor(term) {
  return await client('search', term) 
}

// the event handler for input field updates
async function handleChange(event) {
  this.setState({term: event.target.value})
  await queryEnqueue(() => searchFor(event.target.value)) // the function that I'm looking for
}

我想你是在寻找术语
debounce
。看看这个为什么你不用RxJS试试这个?@AndreiTodorut我还没有学会RxJS(RxJS是一款重量级的aproach。用
setTimeout()
/
clearTimeout()
来编造一些东西相当简单。