2017-07-27 65 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-behavior-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

相關問題