Auf der Suche nach Hilfe mit einer Observable HTTP-Sequenz, möchte ich zwei HTTP-Aufrufe an eine API, die zweite abhängig von der ersten. Die erste gibt ein Array von URLs zurück und die zweite ruft Anfragen für jede URL in diesem Array ab und gibt dann die Antworten im Stream zurück. Wenn ich hart Code in einem der abhängigen Anfrage wie so erhalten, den ich wieder der Titel ich suche:Angular 2 chained Http Anfragen mit Iterable Array
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')
}
);
aber jeder Versuch, mit forEach über das Array zu durchlaufen und dann alle http Anrufe gibt mir dieser Fehler:
browser_adapter.js:84 EXCEPTION: TypeError: Cannot read property 'Symbol(Symbol.iterator)' of undefined
Idealerweise würde ich eine elegante Art und Weise wie diese spätere Anrufe parallel zu dem Ergebnis Array aus dem ersten Aufruf zu machen, aber ich kann nicht, welche von rxJs die Dutzende von Methoden scheinen, um herauszufinden mir helfen könnte TU es. Kann mir jemand Hilfe anbieten?
'flatMap' soll Observable zurückgeben, aber Ihr Code gibt nichts zurück. Vielleicht ist das das Problem. –
Code wurde aktualisiert, Sie hatten Recht darüber –