вызывать несколько API и последовательно подписываться на них - PullRequest
0 голосов
/ 07 января 2019

Примечание . Я ограничен Angular и RxJS версия 5 . :-(
Я хотел бы вызывать API несколько раз в зависимости от значений в массиве, полученном из наблюдаемой, на которую я уже подписан. Код следует этой логике:

this.api.doSomething()
.pipe(
 tap(things => this.thingsArray = things),
 // I want to call an API like this:
    for(const thing of things) {
    this.secondApi.getOtherThings(thing.id)
    .pipe(
     tap(otherthing => this.ExtendedThings.push ({...request, otherThingy: otherThing)
     )
    }
).subscribe()

Меня интересует, как я могу сделать это на внешнем интерфейсе. Я пробовал concat, но у меня нет методов subscribe, как я это сделал. Я думаю, я делал это неправильно. Любая помощь будет принята с благодарностью.

1 Ответ

0 голосов
/ 08 января 2019

Я думаю, что это может быть то, что вы хотите. Flatmap позволяет использовать результат одного Observable для создания другого запроса. В этом случае мы вернем наблюдаемую величину, созданную путем объединения нескольких наблюдаемых.

this.api.doSomething()
.pipe(
  tap(things => this.thingsArray = things),
  flatMap(
    // an array containing all observables with the second set of requests
    const secondaryRequests = things.map(thing=>{
      return this.secondApi.getOtherThings(thing.id)
    })
    // creates an observable that combines all observables in the array. 
    // merge would work similarly
    return concat(secondaryRequests)
  ),
  // otherthing is the result of the second requests (one at a time)
  tap(otherthing => this.ExtendedThings.push ({...request, otherThingy: otherThing})),
).subscribe()
...