Angular: как позвонить finally () с помощью RXJS 6 - PullRequest
0 голосов
/ 05 июля 2018

Я использовал 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 ()?

Ответы [ 3 ]

0 голосов
/ 08 августа 2018

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

import { finalize } from 'rxjs/operators';

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

observable()
    .pipe( 
         finalize(() => {
              // Your code Here
         })
     )
    .subscribe();
0 голосов
/ 22 января 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.

0 голосов
/ 05 июля 2018
...