В моем сервисе Angular у меня есть следующие методы:
// creates an Item and returns the ID of the created Item
createItem(item: Item): Observable<ItemId> {
return this.http.post<ItemId>('some_api_url', item);
}
// returns all Items
getAllItems(): Observable<Item[]> {
return this.http.get<Item[]>('some_api_url');
}
В моем шаблоне я показываю элементы в списке.
Я хотел бы иметь возможность создатьновый элемент, а затем повторно загрузить список (чтобы включить вновь созданный элемент), поэтому я реализовал следующее:
this.itemService.createItem(item)
.pipe(
switchMap(createdId => this.itemService.getAllItems())
).subscribe(result => {
this.items = result;
});
Это, похоже, работает нормально, но в конце я хотел бы сделать некоторыеобработка createdId
также:
this.itemService.createItem(item)
.pipe(
switchMap(createdId => this.itemService.getAllItems())
).subscribe(result => {
this.items = result;
// i would like to use createdId here as well
});
Итак, я придумал следующее:
this.itemService.createItem(item)
.pipe(
switchMap(createdId =>
combineLatest(this.itemService.getAllItems(), of(createdId)))
).subscribe(result => {
this.items = result[0];
// doing some stuff with result[1], which is the value of createdId
});
Но мне нужно использовать combineLatest
внутри switchMap
иЯвный make createdId
an Observable
заставляет меня задуматься о том, является ли это хорошим решением.
Так что в основном я хотел бы создать и элемент, обновить список (когда создание элемента будет завершено) и использовать идентификаторсозданного элемента после завершения обновления.
Есть ли лучший способ сделать это?
Буду очень признателен за любой совет.