Angular: как вызвать 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 ()?


person Sunil Kumar    schedule 05.07.2018    source источник


Ответы (3)


person martin    schedule 05.07.2018
comment
не могли бы вы рассказать мне, как использовать публикацию с refcount в уведомлении только для чтения $: Observable ‹string› = this._notification.asObservable (). pipe (publish ()); - person Sunil Kumar; 05.07.2018
comment
ну, так как RxJS 6 все операторы являются функциями. До RxJS 5 операторов были методами класса Observable. - person martin; 05.07.2018

Необходимо импортировать finalize из rxjs/operators.

import { finalize } from 'rxjs/operators';

Затем finalize используется внутри pipe(),

observable()
    .pipe( 
         finalize(() => {
              // Your code Here
         })
     )
    .subscribe();
person 20B2    schedule 08.08.2018
comment
finalize не имеет аргументов. - person Halil İbrahim Oymacı; 22.01.2019

Согласно официальному документу, вы должны изменить свой код таким образом, чтобы избежать ошибки компиляции : (Вы должны вызвать исключение в 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.

person Halil İbrahim Oymacı    schedule 22.01.2019