如何在rxJs中链接API调用以使用Angular进行订阅和映射?

时间:2019-04-20 21:57:09

标签: javascript angular rxjs

我正在执行多个API调用。一个创建用户,第二个创建团队。

用户创建返回一个UserId,然后将其用作团队创建的一部分。

我在Angular中使用rxjs库,使用.map和.subscribe方法等到第一个调用解决后,再将UserId传递给第二个api调用。

第一个呼叫正在解决并返回我需要的UserId,但是第二个甚至没有发送。

    this.http.post<number>(this.baseUrl + 'api/register/', UserTeam, {
      headers: new HttpHeaders({
        "Content-Type": "application/json"
      })
    })
      .map(response => response)
      .subscribe(result =>
      //result = the new user id from registering new user
      {
        var newTeam = JSON.parse(UserTeam);
        newTeam.userId = result;
        newTeam = JSON.stringify(newTeam);
        this.http.post(this.baseUrl + 'api/team/', newTeam, {
          headers: new HttpHeaders({
            "Content-Type": "application/json"
          })
        }).map(result => result)
      })

我已经调试了,并且在构建URL时,它应该到达了端点,并且当我在邮递员上测试该URL时,与我一起发送的正文成功了,我不确定该调用为何t发送。

在我看来,它应该进行第二次API调用。

我尝试先使用.pipe,然后再使用.map,但这也不起作用。

调试代码时,它会在两个调用之间导航,第二个.map(result => result)包含从response => response返回的相同ID。

这使我认为我只能在取消订阅之前进行一次API调用,任何人都可以对此进行澄清。

1 个答案:

答案 0 :(得分:1)

第二个流没有被订阅。

使用当前的RxJS语法,它看起来应该或多或少像这样

this.http.post(/* args here */)
  .pipe(
    switchMap(result => {
      /* do something with result */
      return this.http.post(/* args here */)
    })
  ).subscribe( /* subscriber here */)