Javascript 下面的函数能否实现我忽略过时响应的目标?

Javascript 下面的函数能否实现我忽略过时响应的目标?,javascript,Javascript,我有一个去公告的搜索函数。每次对文本区域触发keyup事件时,都会调用它 { search: _.debounce(search, 200), } 当用户在文本区域键入时获取结果的想法 { search: _.debounce(search, 200), } 但是,不能保证AFAICT对后端的搜索调用将按发送顺序返回(网络延迟、服务器异常),这意味着结果可能(尽管不太可能)对应于较早的搜索词 因此,在执行搜索时,我想取消(或至少忽略对)任何飞行中请求的响应 我有两个问题: 这是一个

我有一个去公告的搜索函数。每次对文本区域触发
keyup
事件时,都会调用它

{
  search: _.debounce(search, 200),
}
当用户在文本区域键入时获取结果的想法

{
  search: _.debounce(search, 200),
}
但是,不能保证AFAICT对后端的搜索调用将按发送顺序返回(网络延迟、服务器异常),这意味着结果可能(尽管不太可能)对应于较早的搜索词

因此,在执行搜索时,我想取消(或至少忽略对)任何飞行中请求的响应

我有两个问题:

  • 这是一个真正需要解决的问题吗?(我以前从未见过它被解决),以及

  • 下面的代码能帮助我实现这一点吗

函数ignoreStale(fn){
var=0;
返回函数(){
var id=++latest;//也增加latest
返回fn.apply(这个,参数)
.然后(函数(结果){
如果(id!==最新){
抛出新错误(“过时回调”);
}
返回结果;
});
}
}
var callCount=0;
变量o={
foo:ignoreStale(foo),
};
函数foo(val){
呼叫计数--;
返回新承诺(功能(解决、拒绝){
setTimeout(resolve.bind(null,val),(5000+callCount*200));
});
}
函数go(val){
o、 foo(val).then(doSomething).catch(error);
}
go('1');//返回第三
go('12');//返回秒
go('123');//先返回
函数错误(err){
文件。写(err,
); } 功能剂量测定法(val){ document.write('Doing something:',val,
);
}
与其每次按键事件都调用它,不如在该事件中添加一个计时器,这样它就需要从用户最后按下的一个按键至少经过1秒才能发送搜索请求?这就是去Bounce的目的。XHR有一个
中止
方法。我不确定这里的问题是什么。你只是在寻找这个术语,还是想要一个解决方案(即代码)?我的问题在我写了一个解决方案之后已经演变了。我将重新回答这个问题。与其每次按键事件都调用它,不如在该事件中添加一个计时器,这样它就需要从用户上次按下的按键至少经过1秒才能发送搜索请求?这就是去Bounce的目的XHR有一个
中止
方法,我不确定这里的问题是什么。你只是在寻找这个术语,还是想要一个解决方案(即代码)?我的问题在我写了一个解决方案之后已经演变了。我将重新回答这个问题。