Из кода, который вы разместили, и комментариев, я предполагаю, что remoteStorageService.delete
и remoteStorageService.getAll()
возвращают некоторые наблюдаемые, в то время как localStorageService.delete()
возвращает void
.
Если это так, вы можете попробовать что-то вроде этого
delete(model: T, paginate: PaginateInterface): Observable<any> {
return this.remoteStorageService.delete(model)
.pipe(
concatMap((resultDelete: boolean) => {
if (resultDelete) {
this.localStorageService.delete(model);
return this.remoteStorageService.getAll();
} else {
return EMPTY // if the delete fails you complete the Observable
// you can also error here if you want to terminate the Observable with an error
}
})
)
}
Ключевым моментом здесь является то, что сначала вы выполняете remoteStorageService.delete
и ждете, пока наблюдаемое не сообщит о своем результате. Использование оператора concatMap
гарантирует, что Наблюдаемые, содержащиеся в concatMap
, будут выполнены (или точнее подписаны) только после того, как remoteStorageService.delete
уведомит о своем результате. Затем вы можете использовать результат remoteStorageService.delete
, чтобы решить, следует ли возвращать remoteStorageService.getAll()
или возвращать EMPTY
.
. В первом случае remoteStorageService.getAll()
будет Наблюдением, подписанным Компонентом, во втором case EMPTY
будет Observable, подписанным Компонентом. EMPY
- это наблюдаемая, которая ничего не излучает и немедленно прекращает работу.