Angular Rx Js как l oop через массив и назначить HTTP-запросы на получение одной реактивной наблюдаемой - PullRequest
0 голосов
/ 17 июня 2020

Мне нужна помощь, пытаясь l oop через массив строковых номеров и назначать HTTP-запросы на получение каждому строковому номеру, а затем назначать результаты одной реактивной наблюдаемой. Я смог осуществить это на уровне компонентов, но мне нужен результат в виде наблюдаемого, который исходит из моей службы. Я пытаюсь использовать Rx Js, но у меня возникают проблемы с определением правильного синтаксиса здесь. Надеюсь, в этом есть смысл, спасибо.

myservice

constructor(http: HttpClient)

 issueNumberString: string[];
 issuesObservable$;
 newIssueObservable$;
 private URL = '/my/api/stuff/';


getInfo() {
 for (let index = 0; index < this.issueNumbersString.length; index++) {
this.https.get<any[]>(this.URL + this.issueNumbersString[index])
.subscribe((response: any) => {
 return this.issuesObservable$.push(...response.records)  
})
}

this.newObservable$ = this.getInfo();
}

.ts

newObservable$ = this.myservice.newObservable$;

constructor(private service: myservice)

html

<div *ngIf="newObservable$ | async as entry">
    <div *ngFor="let n of entry">

1 Ответ

2 голосов
/ 17 июня 2020
Цель

немного неясна, но вы должны использовать forkJoin для запуска массива наблюдаемых:

getInfo() {
  return forkJoin(
    this.issueNumbersString.map(i => 
      this.http.get<any[]>(this.URL + i))
  ).pipe(
    map(recordsArrays => recordsArrays.reduce((arr, r) => arr.concat(r.records), [])
  )
}

forkJoin дает вам массив ваших ответов, затем оператор map в конец до сводит его к одному массиву всех записей.

...