我们有一个应用程序可以每天提取用户的日程安排。他们可以侧面滚动几天,在每个滚动停止时它会触发http.get
并抓住当天的时间表。
我们遇到的问题是人们滚动,举起手指并继续滚动。我们实施了超时,因此幻灯片停止和请求触发之间存在延迟,但我们无法做太长时间,仍会触发大量http.get
个请求。
我需要一种方法来在新的开始时取消任何待处理的HTTP请求。
slideStop() {
..gather date information and other relevant parameters..
<stop any pending HTTP requests>
this.http.get()
}
答案 0 :(得分:2)
如果在observable上使用switchMap
,当您重复使用文档中提到的此可观察对象时,它将取消所有待处理的请求(https://angular.io/docs/ts/latest/guide/router.html#activatedroute-the-one-stop-shop-for-route-information)
switchMap运算符允许您使用Observable的当前值执行操作,并将其映射到新的Observable。与许多rxjs运算符一样,switchMap处理Observable和Promise来检索它们发出的值。
如果用户在仍然检索英雄的同时重新导航到该路线,switchMap运营商也将取消任何正在进行的请求。