【问题标题】:Use combineLatest when 2nd observable depends on the first当第二个 observable 依赖于第一个时,使用 combineLatest
【发布时间】:2019-10-03 02:44:21
【问题描述】:

我刚刚进入 rxjs,目前正在学习 combineLatest。我知道它将多个可观察对象组合为一个。我想知道当我的第二个 observable 依赖于第一个的值时,是否仍然可以使用 combineLatest。

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

【问题讨论】:

    标签: angular rxjs


    【解决方案1】:

    快速回答是 - 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 请求的类型

    【讨论】:

      【解决方案2】:

      不。当两个可观察对象相互依赖时,您不能使用 combineLatest。你解释的场景可以通过switchMap来处理。它将获取第一个 observable 的值并订阅第二个 observable

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-10-25
        • 2021-09-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多