Дождаться, пока значение наблюдаемой (в виде списка) вызовет другую наблюдаемую, используя каждого члена из списка? - PullRequest
0 голосов
/ 19 сентября 2019

Я использую 3 конечных точки для своего приложения, 1 из конечных точек зависит от другого ответа конечной точки, который является списком, тогда мне нужно использовать каждый элемент списка для использования другой конечной точки, давайте назовем ихepA, epB и epC, epA возвращает список, а затем я использую этот список на epB, что-то вроде epA.Foreach( x => epB(x)), и я пытаюсь объединить epB и epC в один объединенныйсписок, так как оба имеют одинаковые поля.

Моя проблема в том, что я слишком нов, используя угловые и наблюдаемые, я не знаю, есть ли способ объединить эти результаты epB и epC (не упоминая, что в настоящее время,Я подписываюсь на наблюдаемые и присваиваю их значения другим объектам, которые мне нужны) ... Если бы кто-нибудь мог мне помочь, это было бы очень признательно.Извините, если это слишком грязно, у меня мало опыта публикации здесь и написания кода на угловых.

вот какой-то код, который у меня сейчас есть ... он немного уродливый, но он делает свою работу

код

this._serverRequests.epA(this._Token).subscribe(x => {
    this.servers = x;
    x.forEach(server => 
      this._serverRequests.epB(server)
      .subscribe(info => {
         this.serverInfo = info;
         this.GridModel.data = info['States'];
         this.GridModel.data.forEach(se => {
             se.Start = this.formatValuesPipe.transform(se.Start, 'grid');
         });
         this.GridModel.data.map( o => {
            o.ServerUrl = server;
         });
       })
     );
},
   error => this.errMsg = <any>error
);

this._serverRequests.epC(this._Token).subscribe(lic => {
   this.licensesList = lic;
   this.licensesModel.data = this.licensesList.LicenseUsageList;
   this.licensesModel.data.forEach(li => {
      li.AcquisitionTime = this.formatValuesPipe.transform(li.AcquisitionTime, 'grid'); 
   });
});

Я также попробовал forkjoin, нотак как epA возвращает список, я не знаю, как вызвать каждый элемент внутри forkjoin

1 Ответ

0 голосов
/ 19 сентября 2019

Вы можете отобразить ответ от первого звонка в массив вызовов, а затем использовать combLatest, чтобы получить массив всех ответов.

this._serverRequests.epA(this._Token).pipe
  map(server => this._serverRequests.epB(server)),
).subscribe(requests => {
  combineLatest(requests).subscribe(results => {
    // You have an array of the multiple results here
  })
});
...