Typescript Angular HTTP请求仅获得最后结果

时间:2018-10-23 21:06:42

标签: javascript angular typescript rxjs httpclient

什么是确保我的Angular HTTP请求仅返回最新的响应数据的“最佳”(常见)方法? (我正在使用Angulars HttpClient)

假设用户在返回前一个请求的响应之前提交了一个新请求。我的后端需要更多的时间来处理第一个请求,因此第二个请求在第一个请求->视图获取的更新之前先返回,然后再返回。现在,视图将使用旧数据进行更新。那显然不是我想要的。

我找到了解决请求的方法,但这真的是唯一的方法吗?是否有任何功能可以实现?

if ( this.subscription ) {
   this.subscription.unsubscribe();
}
this.subscription = this.http.get( 'myAPI' )
 .subscribe(resp => {
  // handle result ...
});

我知道有一个 switchMap()运算符,该运算符仅返回最新数据,但据我所知,您只能在可观察范围内使用它。就我而言,我没有观察到任何输入更改。我只是通过HTML模板中的(ngSubmit)=“ doRequest()”指令在表单提交上调用了一个函数。

// get called on submit form
doRequest() {
 this.http.get('myAPI')
  .subscribe(resp => {
    // handle result ...
  });
}

是否可以使用switchMap运算符,或者您还有其他解决方案吗?感谢您抽出宝贵的时间:)

PS:当然,在我的真实项目中,我有一个api服务类,该类具有执行请求并仅返回http响应可观察对象的不同功能。因此,我在doRequest()函数中订阅了这种可观察的消息。

1 个答案:

答案 0 :(得分:2)

您只需使点击/请求流成为可以关闭的流...用户的请求/点击是可以观察和响应的事件流。

private requestSource = new Subject();

request() {
  this.requestSource.next();
}

ngOnInit() {
  this.requestSource.switchMap(req => this.http.get('myApi'))
                       .subscribe(response => console.log(response, "latest"));
}

现代的客户端编程经验法则:即使看起来并不像现在一样,一切都是流。