Ich habe 3 Angular2-Dienste erstellt, die Kategorien, Standorte und Elemente von verschiedenen http-Endpunkten abrufen. Ich möchte jetzt einen neuen Dienst erstellen, der Daten von diesen Diensten abruft und ein neues DataSet aus allen abgerufenen Daten erstellt, aber ich kann kein Observable aus dem nicht-iterierbaren DataSet-Objekt erstellen.Beobachtbar über einen Nicht-Array-Typ
Gibt es eine bessere Möglichkeit, Daten in einer einzigen Struktur zu konsolidieren, wie bei der Verwendung von 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);
}
}
Dank Aluan, Sie beantwortet die Frage in Bezug auf Observable.of aber das hat nicht das gewünschte Ergebnis erreicht. Ich habe erwartet, dass der Abonnent nicht angerufen wird, bis die verschachtelten Sammlungen gefüllt sind, aber ich denke, dass ich dafür in beobachtbare Verkettung schauen muss. – Dennis
Das ist richtig. Sie können Merge oder Fork-Join oder Concat verwenden. Alle sind anders. –
Natürlich gibt es ein paar Dutzend andere Möglichkeiten, das auch in RxJS zu tun. Der offensichtlichste Weg besteht darin, dass alle abonnierten Anrufe durch Kartenanrufe ersetzt und dann verschachtelt werden, was zu unlesbarem Code führt. –