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