Вы можете использовать pipe, filter и switchMap для этого:
subscriptions : Subscription[] = [];
openDeleteDialog(data : any)
{
const modalRef : NgbModalRef = this.modalService.open(ConfirmationDialogComponent); //Modal dialoge reference
this.subscriptions.push(
modalRef.componentInstance.passResult
.pipe(
filter((result) => !!result),
switchMap((result) => {
let updateApi : UpdateApi = new UpdateApi(data);
return this.srv.updateData(updateApi);
}),
switchMap((updateResult) => this.srv.getData())
).subscribe((getDataResult) => console.log(getDataResult))
);
}
Сначала вы используете фильтр, чтобы передавать данные только тогда, когда результатом является что-то, затем вы переключаетесь на новую наблюдаемую, наблюдаемые данные обновления,и в то же время вы передаете этот канал, чтобы переключиться на получение наблюдаемых данных. Таким образом, вы связываете наблюдаемые, я полагаю, вам нужно подождать, пока результат обновления данных не получит данные снова.
РЕДАКТИРОВАТЬ: дополнительная часть информации, вы использовали tap для вызова this.srv.getData()
, но еслиэто возвращает наблюдаемое с запросом http, этот запрос никогда не будет вызван, так как вам нужно подписаться на него, чтобы запрос был выполнен. Как правило, я использую отводную трубу для побочных эффектов, которые будут нуждаться только в результате наблюдаемого, но не изменят ничего, что связано с наблюдаемым, если это имеет какой-то смысл.