【问题标题】:Sending two http request one after another一个接一个地发送两个http请求
【发布时间】:2022-11-02 18:20:00
【问题描述】:

我有 2 个 api 调用,我想一个接一个地发送。 我需要第一个响应来发送第二个 api 请求,但我还需要第一次调用的数据。看起来 switchMap 是要走的路,atm 看起来像这样:

this.apiCall1().pipe(switchMap(res1 => this.apiCall2(res.data))).subscribe(res => ...)

但我需要将 res1.differentData 分配给 switchMap 似乎不可能的变量。或者我只是缺少一些语法。

【问题讨论】:

    标签: javascript angular rxjs


    【解决方案1】:

    我建议您重新发送来自apiCall1() 的值并使用forkJoin 在最后获取两个值:

    this.apiCall1().pipe(
      switchMap(res => forkJoin(
        [of(res), this.apiCall2(res)]
      ))).subscribe(console.log)
    

    这样,您最后会收到一个包含两个元素(两个调用的结果)的数组。

    【讨论】:

      【解决方案2】:

      如果我自己不运行代码,这是我的看法。

      可能打破你的回调函数:

      let res1Stored;
      
      this
        .apiCall1()
        .pipe(switchMap(res1 => {
          res1Stored = res1.differentData;
          return this.apiCall2(res.data);
        }))
        .subscribe(res => ...)
      

      希望这可以帮助。

      【讨论】:

        【解决方案3】:

        您还可以使用映射到内部调用以包含来自外部的全部或部分响应(通常用于典型的元素+细节)

        this.apiCall1().pipe(
          switchMap(res1 => this.apiCall2(res1).pipe(
                   map(res2=>({res1:res1,res2:res2})))
          )
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2018-07-12
          • 2020-07-21
          • 2013-03-11
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多