Вот упрощенный код, который делает то, что вы хотите.
Важным битом является метод push в сервисе. Очевидно, вам нужно изменить его, чтобы он соответствовал HTTP-запросу, который вы делаете. Оператор console.log
в ngOnInit
регистрирует список всех ответов сервера после завершения всех ответов .
.ts:
import { Component, OnInit } from '@angular/core'
import { PushItService } from './push-it.service'
@Component({
selector: 'app-root',
templateUrl: './app.component.html',
styleUrls: ['./app.component.css']
})
export class AppComponent implements OnInit {
public myObservable$
constructor(private pushItService: PushItService) {}
ngOnInit() {
this.myObservable$ = this.pushItService.push([{id: 1}, {id: 2}, {id: 3}])
this.myObservable$.subscribe((data) => {
console.log('data', data)
})
}
}
.service.ts:
import { Injectable } from '@angular/core'
import { HttpClient } from '@angular/common/http'
import { forkJoin, of } from 'rxjs'
import { mergeMap } from 'rxjs/operators'
@Injectable({
providedIn: 'root'
})
export class PushItService {
constructor(private http: HttpClient) {}
push(arr) {
return of(arr).pipe(
mergeMap(value => forkJoin(value.map(v => this.http.get('http://localhost:3000/random/' + v.id))))
)
}
}
Я использовал этот ресурс для написания этого кода ... https://www.learnrxjs.io/operators/combination/forkjoin.html ... см. Пример 2
Протестировал это, и оно работает безупречно, но вы должны представить некоторую обработку ошибок. Это вам тоже поможет