Угловое: как вызвать finally() с помощью RXJS 6
Я использовал RXJS 5, теперь, когда я обновил его до 6, у меня возникли некоторые проблемы.
Раньше я был в состоянии использовать catch и, наконец, но в соответствии с обновлением catch заменяется на catchError (с в трубе) теперь, как использовать наконец?
Также у меня есть некоторые вопросы:
Мне нужно изменить throw-> throwError (в нижнем коде Observable.throw(err);)
import { Observable, Subject, EMPTY, throwError } from "rxjs";
import { catchError } from 'rxjs/operators';
return next.handle(clonedreq).pipe(
catchError((err: HttpErrorResponse) => {
if ((err.status == 400) || (err.status == 401)) {
this.interceptorRedirectService.getInterceptedSource().next(err.status);
return Observable.empty();
} else {
return Observable.throw(err);
}
})
//, finally(() => {
// this.globalEventsManager.showLoader.emit(false);
//});
);
Также как использовать publish(). RefCount() сейчас?
Ответы
Ответ 1
Ответ 2
Необходимо импортировать финализ из rxjs/операторов
import { finalize } from 'rxjs/operators
Затем finalize используется внутри pipe()
,
observable()
.pipe(
finalize(() => {
// Your code Here
}
)
).subscribe()
Ответ 3
Согласно официальному документу, вы должны изменить свой код следующим образом, чтобы избежать ошибки компиляции: (Вы должны catchError
исключение в методе catchError
Метод обратного вызова finalize
не имеет аргумента.)
import { catchError, finalize } from 'rxjs/operators';
return next.handle(clonedreq).pipe(
catchError(error => {
console.log('error occured:', error);
throw error;
}),
finalize(() => {
console.log('finalize')
})
);
Он успешно скомпилирован в Angular CLI: 7.1.4.