我創建了3個Angular2服務,可從不同的http端點檢索類別,位置和項目。我現在想創建一個新的服務,從這些服務中檢索數據,並從檢索到的所有數據創建一個新的DataSet,但我無法從非迭代的DataSet對象創建Observable。非陣列類型可觀察
有沒有更好的方法來將數據整合到單個結構中,例如使用Observables?
export class DataSet {
items: Item[];
locations: Location[];
categories: Category[];
}
@Injectable()
export class DataService {
_data : DataSet;
constructor(
private _http: Http,
private _categoryService: CategoryService,
private _locationService: LocationService,
private _itemService: ItemService) { }
getDataSet(): DataSet {
this._data = new DataSet();
this._categoryService.getCategories().subscribe(cats => {
this._data.categories = cats;
});
this._locationService.getLocations().subscribe(locs => {
this._data.locations = locs;
});
this._itemService.getItems(null).subscribe(items => {
this._data.items = items;
});
// ERROR can't create observable from non array type dataset
return Observable.from(this._data);
}
}
感謝Aluan,您回答了有關Observable.of的問題,但沒有達到預期的結果。我期待的訂閱者將不會被調用,直到嵌套集合填充,但我想我需要看看可觀察的鏈接。 – Dennis
這是正確的。您可以使用合併或分叉連接或concat。一切都不一樣。 –
當然,在RxJS中也有幾十種其他方法可以做到這一點。不幸的是,最明顯的方式是用地圖調用代替所有的訂閱調用,然後嵌套,這將導致代碼不可讀。 –