如何重用角度4

时间:2017-09-04 10:40:03

标签: angular http rxjs angular2-observables

在我的项目中,有时候因为我犯的错误或新的团队成员犯了错误,有时会出现一个http请求,其中一些特定的参数会同时发送到远程后端(意思是那里)同样严格的请求将出现在浏览器的http请求中,在dev工具中两次作为挂起)。

这种情况对我们不利,并且在远程以比发送它们的间隔慢的速率回答此请求的情况下,它引起了我们的问题。

这里显而易见的解决方案是始终确保在发送相同类型的下一个请求(和params)之前得到某种类型的请求的答案。但我认为应该有一种方法可以确保以通用的方式确定如果某个请求即将与角度http服务一起发送,如果该请求已经存在且具有挂起状态,则该服务可以返回SAME可观察到的由先前已经挂起的请求返回(当我有2个不同且不相关的组件一个接一个地发出相同的请求时,这将解决一些混乱的情况,这将使它们都订阅相同的observable。)

我们已经有了一个服务,用http覆盖了我们项目中的所有用途。

问题是我如何能够实现这种行为(或者,如果由于某种原因我的想法是错误的,也许我不应该针对这样的行为?),我正在寻找最简单的解决方案(也许有一些已经通过角度实现的东西,以实现这一点,我错过了吗?)或者如果没有某种基于可观察的解决方案来检查每个请求,如果请求已经存在,并且状态为

2 个答案:

答案 0 :(得分:0)

我想建议switchMap,但distinctUntilChanged会在这种特定情况下提供帮助,因为我们希望在参数不同时发出请求。我认为论证来自另一个可观察的。

Rx.Observable
  .interval(300) // every 300ms
  .mapTo(Math.floor(Math.random() * 10) // emit a number from 0 to 9
  .distinctUntilChanged() // if number is the same, ignore it
  .flatMap(number => this.exampleService.makeRequest(number)) // make a request for a unique number
  .subscribe(response => console.log(response)); // log response

答案 1 :(得分:0)

问题可能出在多个订阅中:

var res = this.myService.get();
var firstSubscription = res.subscribe(); // first http call
var firstSubscription = res.subscribe(); // second

尝试使用多播运营商:

var resShared = this.myService.get().share();