【发布时间】:2019-10-03 02:44:21
【问题描述】:
我刚刚进入 rxjs,目前正在学习 combineLatest。我知道它将多个可观察对象组合为一个。我想知道当我的第二个 observable 依赖于第一个的值时,是否仍然可以使用 combineLatest。
例如,我的第一个电话会给我一个用户 ID。然后我需要将该用户 ID 传递给第二次调用。在这种情况下可以使用 combineLatest 吗?
【问题讨论】:
我刚刚进入 rxjs,目前正在学习 combineLatest。我知道它将多个可观察对象组合为一个。我想知道当我的第二个 observable 依赖于第一个的值时,是否仍然可以使用 combineLatest。
例如,我的第一个电话会给我一个用户 ID。然后我需要将该用户 ID 传递给第二次调用。在这种情况下可以使用 combineLatest 吗?
【问题讨论】:
快速回答是 否 - combineLatest 只会在所有可观察对象至少发出一次后才会发出值。 在您的情况下,您可以使用:
http.get('/my-url-for-id').pipe(
flatMap(response => this.http.post('/some-other-url', response.id))
)
第二个http GET 将在第一个之后执行。
如果你想同时返回第一次调用和第二次调用的结果,你真的可以使用combineLatest like:
this.http.get('/id').pipe(
flatMap(response => combineLatest(
[
of(response.id),
this.http.post('/some-other-url', response.id)
]
)
)
生成的 observable 将是 Observable<[string, {}]> 类型,其中 {} 是第二个 post 请求的类型
【讨论】:
不。当两个可观察对象相互依赖时,您不能使用 combineLatest。你解释的场景可以通过switchMap来处理。它将获取第一个 observable 的值并订阅第二个 observable
【讨论】: