Наблюдаемые объекты по своей природе не запускают уведомление complete
в случае уведомления error
. Они являются взаимоисключающими, то есть, если поток выходит из строя, он не может впоследствии complete
или next
. И если поток завершится, он не сможет error
или next
после этого.
Таким образом, вам нужно обработать ошибку либо с помощью блока оператора catchError
, либо в блоке обратного вызова error
.
Попробуйте следующее
onSave(payload) {
this.loading = true;
const addIdp = this.identityProviderService.save(payload);
this.autoUnsubscribe(addIdp.subscribe(
(data) => {
this.loading = false; // <-- set variable here
this.notificationsService.success(this.translateService.instant('idp.form.add-success'), '');
this.ref.close(data);
},
(error) => {
this.loading = false; // <-- and here
this.notificationsService.error(this.translateService.instant('idp.form.add-error'), '');
}
);
}
Или вы можете использовать оператор finalize
. Из документации
[it] вызовет указанную функцию, когда исходный код завершится после завершения или ошибки.
onSave(payload) {
this.loading = true;
const addIdp = this.identityProviderService.save(payload).pipe(
finalize(() => this.loading = false) // <-- set variable here
);
this.autoUnsubscribe(addIdp.subscribe(
(data) => {
this.notificationsService.success(this.translateService.instant('idp.form.add-success'), '');
this.ref.close(data);
},
(error) => {
this.notificationsService.error(this.translateService.instant('idp.form.add-error'), '');
}
);
}