Как связать вызовы API в rxJs подписаться и сопоставить с Angular? - PullRequest
0 голосов
/ 21 апреля 2019

Я выполняю несколько вызовов API. Один создает пользователя, а второй создает команду.

Создание пользователя возвращает UserId, который затем используется как часть создания команды.

Я использую библиотеку rxjs с Angular, использую методы .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-адресу при тестировании на почтальоне, я не уверен, почему вызов не выполняется ' отправка.

Мне кажется, что он должен сделать второй вызов API.

Я пытался использовать .pipe, а затем .map, но это тоже не работает.

При отладке кода он перемещается по обоим вызовам, а второй .map(result => result) содержит тот же идентификатор, возвращаемый из response => response.

Это заставляет меня думать, что я могу сделать только один вызов API перед отпиской, может кто-нибудь прояснить это.

1 Ответ

1 голос
/ 21 апреля 2019

Второй поток не подписан.

С текущим синтаксисом RxJS он должен выглядеть примерно так

this.http.post(/* args here */)
  .pipe(
    switchMap(result => {
      /* do something with result */
      return this.http.post(/* args here */)
    })
  ).subscribe( /* subscriber here */)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...