2017-07-27 10 views
0

AngularJSでは、return $q.all(promises)を使用してコントローラに約束を返すことができます。 Angularでそれを行う正しい方法は何ですか?どのようにデータをコンポーネントに返すことができますか?Angularサービスで複数の非同期呼び出しの結果を返す方法

私のサービスは:

import { Injectable } from '@angular/core'; 
import { Http } from '@angular/http'; 
import { Observable } from 'rxjs/Rx'; 

import { Item } from '../item'; 

@Injectable() 
export class GetItemListService { 
    constructor(private http: Http) { } 

    private url1 = 'urlToGetItemList1'; 
    private url2 = 'urlToGetItemList2'; 

    getItemList(): ??? <Item[]> { 
    Observable 
     .forkJoin(
      this.http.get(url1).map(res => res.json()), 
      this.http.get(url2).map(res => res.json()) 
     ) 
     .subscribe(
      data => { 
       // this is the result I want to return to component 
       return data 
      } 
     ) 
    } 
} 
+1

あなたは、入力および出力として期待するものの例を与えることができますか?これはhttps://stackoverflow.com/questions/35608025/promise-all-behavior-with-rxjs-observablesに非常によく似ています – 0mpurdy

+1

[Promise.allビヘイビアとRxJS Observablesの重複の可能性がありますか?](https://stackoverflow.com)/questions/35608025/promise-all-behaviour-with-rxjs-observables) –

+0

は 'getItemList'メソッドの中の' Observable.forkJoin'を返し、あなたのコンポーネントの中でそれを購読します。 – echonax

答えて

1

@ echonaxの答えでそれを解決しました。コンポーネントにはObservable.forkJoinsubscribeが返されます。

サービス:

getItemList(): Observable <Item[]> { 
    return Observable 
     .forkJoin(
      this.http.get(url1).map(res => res.json()), 
      this.http.get(url2).map(res => res.json()) 
     ) 
    } 

コンポーネント:

ngOnInit(): void { 
     this.getItemListService.getItemList() 
     .subscribe(data => { 
      console.log(data) 
     }) 
    } 
+0

あなたはタイマーが切れるときあなた自身の答えを受け入れることができます;) – echonax

関連する問題