【发布时间】:2018-11-22 13:30:11
【问题描述】:
我正在为我的项目开发搜索功能。一旦用户在搜索栏上输入任何内容;在搜索文本发生任何变化时,我会将文本发送到后端进行验证并接收响应(文本中有错误或没有错误):
this.searchBar.on('change', () => {
http.post('api_link', {searchText:
this.serachBar.searchText}).subscribe(resp => {
this.resp = resp['Result'];
});
})
现在,随着用户不断在搜索栏中输入内容,多个验证响应会通过后端传入。但是,对于任何新的更改,只有最新的订阅有效,之前对 api 的任何调用都是无用的。
有什么方法可以取消之前使用订阅对 api 的任何新调用的订阅?
注意:似乎可以只等待所有响应,但我还将在搜索栏下方显示响应(在此之前显示加载器)。因此,与其在各种响应状态之间转换,我希望加载器继续加载直到最新响应可用。
【问题讨论】:
-
查看 switchMap 并去抖动。
-
您可以使用
unsubscribe()订阅每个新更改。这样旧的http请求将被取消,只有最新的subscription有效 -
一个很好的资源,可以在未来帮助你:learnrxjs.io
标签: angular rxjs httprequest observable subscribe