比方說,我有一個服務得到的屬性列表:RxJS和angular2
export class PropertyService {
private properties: any;
constructor(@Inject(Http) http) {
this.http.get('/properties.json')
.map((res:Response) => res.json())
.subscribe(
data => this.properties = data
);
}
getProperty(property: string) {
this.properties[property];
}
}
的問題是,當properties
是getProperty
叫尚未加載。 如何讓getProperty
等待訂閱來填充數組? 我寧願不返回對組件的訂閱。
編輯:
我試圖paulpdaniels回答,並與pluck
工作。但我卡住得很快。 所以基本上我有這個PropertyService返回一個HOST
。 我有一個ApiService使用該主機做另一個Ajax調用來獲取數據。
export class PropertyService {
private properties: any;
constructor(@Inject(Http) http) {
this.properties = http.get('/properties.json')
.map((res:Response) => res.json()).cache(1);
}
getProperty(property: string) {
this.properties.pluck(property);
}
}
export class ApiService {
private http: Http;
private host: string;
constructor(@Inject(Http) http, @Inject(PropertyService) propertyService) {
this.http = http;
this.host = propertyServiceService.getProperty("API.URL"); //Is a subscription
}
getData(): any {
//Here I must subscribe to host, and once available,
//use host to do an ajax call that returns another Observable for the component
}
}
如何實現這一點?
問題是我有嵌套的observable,因爲我需要一個observable的響應來產生一個新的observable –
你只需要繼續擴展Observable,Observable的好處是它們基本上是無限可擴展的。我會用一個例子來更新。 – paulpdaniels