Търся помощ за Observable http последователност, искам да направя две http извиквания към api, като второто зависи от първото. Първият връща масив от URL адреси, а вторият прави заявки за получаване за всеки URL адрес в този масив и след това връща отговорите в потока. Ако кодирам твърдо в една от зависимите заявки, така че да получа обратно едно от заглавията, които търся:
search(character): Observable<any> {
let that = this
let queryUrl: string = character.url;
return this.http.get(queryUrl)
.map((response: Response) => {
this.characterResults = response.json().films
return this.characterResults
//Example response:
// ["https://api.com/films/1", "https://api.com/films/2", "https://api.com/films/3", "https://api.com/films/4"]
})
.flatMap((film) => {
return that.http.get(film[0])
.map((response: Response) => {
return response.json().title
})
})
}
getApiData(character) {
this.apiService.search(character)
.subscribe((results) => { // on sucesss
console.log(results)
},
(err: any) => { // on error
console.log(err);
},
() => { // on completion
console.log('complete')
}
);
но всеки опит за итерация с помощта на forEach над този масив и след това извършване на всички http извиквания ми дава тази грешка:
browser_adapter.js:84 EXCEPTION: TypeError: Cannot read property 'Symbol(Symbol.iterator)' of undefined
В идеалния случай бих искал елегантен начин да направя тези последващи извиквания успоредно с резултатния масив от първото извикване, но не мога да разбера кой от десетките методи на rxJs може да ми помогне да го направя. Може ли някой да ми предложи помощ?
flatMap
трябва да върне Observable, но вашият код не връща нищо. Може би това е проблема. - person Harry Ninh   schedule 22.07.2016