当第二个可观察者取决于第一个时,请使用CombineLatest

时间:2019-10-03 02:44:21

标签: angular rxjs

我刚开始接触rxjs,目前正在学习CombineLatest。我的想法是,它将多个可观察值组合为一个。我想知道当我的第二个可观察项取决于第一个的值时是否仍然可以使用CombineLatest。

例如,我的第一个电话会给我一个用户ID。然后,我需要将该用户ID传递给第二个调用。在这种情况下可以使用CombineLatest吗?

2 个答案:

答案 0 :(得分:0)

否。当两个可观察的对象彼此依赖时,不能使用combinateLatest。您解释的场景可以由switchMap处理。它将采用第一个可观察值,并订阅第二个可观察值

答案 1 :(得分:0)

快速答案是-CombineLatest仅在所有可观察对象至少发出一次之后才发出值。 您可以使用:

http.get('/my-url-for-id').pipe(
  flatMap(response => this.http.post('/some-other-url', response.id))
)

第二个http GET将在第一个combineLatest之后执行。

如果您想同时返回第一个调用和第二个调用的结果,则可以像这样使用this.http.get('/id').pipe( flatMap(response => combineLatest( [ of(response.id), this.http.post('/some-other-url', response.id) ] ) )

Observable<[string, {}]>

所得的可观察值将为{}类型,其中post是第二个thread Thread[vert.x-eventloop-thread-1,5,main] has been blocked for 4102 ms, time limit is 2000 ms请求的类型