angular - Cum să faci ca execuția să aștepte rezultatele forkJoin
Cum pot face ca următorul cod să aștepte executarea forkJoin pentru a putea returna rezultatele din bulkRequest?
constructor(private http: Http) {
let results = this.bulkRequest(this.get("https://jsonplaceholder.typicode.com/posts/1"),
this.get("https://jsonplaceholder.typicode.com/posts/1"),
this.get("https://jsonplaceholder.typicode.com/posts/1"));
console.log("results");
}
get(url: string): Observable<any> {
return this.http.get(url).map(response => response.json());
}
bulkRequest(...sources: SubscribableOrPromise<any>[]): any[] {
let results: any[];
Observable.forkJoin(
sources
).subscribe(response => {
console.log("responses");
results = response;
}, error => {
console.log("error: " + error.toString());
},
() => {
console.log("finally");
});
return results;
}
În prezent, obțin următoarea ieșire în consolă și variabila results este undefined:
results
responses
finally
Observable-ul chiar se execută, dacă pun un breakpoint la linia console.log("results"), văd toate trei ca Pending în fila Rețea.
Plnkr: http://plnkr.co/edit/2wb72kw7S3wYUUwwwi8h?p=preview
Răspuns #1
return Observable.forkJoin( ...
și elimină
return results;
Nu există nicio modalitate de a aștepta observabilele. Trebuie să te abonezi la observable-ul returnat unde apelezi bulkRequest().
Răspunsul #2
Returnează Observable în loc de variabila results:
public bulkRequest(...sources: SubscribableOrPromise<any>[]): any[] {
return Observable.forkJoin(sources);
}
Vezi demonstrația ta actualizată: http://plnkr.co/edit/7DPBjeha0p2vdj4QjN5V?p=info
