получение TypeError: .finalize не является функцией в Rxjs6

В следующей функции я получаю ошибку времени выполнения TypeError: this.authService.authServiceSigninUser(...).map(...).catch(...).finalize is not a function.

Вопрос 1) Почему Typescript не улавливает эту ошибку во время компиляции? Как я мог поймать эту ошибку во время компиляции.

Вопрос 2) Как я могу устранить ошибку? Я пытался использовать как finally, так и finalize, но оба не работают.

public signinUser(user:UserSigninInfo):any{

    this.loaderService.show(); //this shows a spinner
    return this.authService.authServiceSigninUser(user)
      .map(response=>{
        console.log('response from backend service',response);
        let result= <HttpResponse<any>>response; 
        let authToken = result.headers.get("x-auth-token")
        if(authToken == null) {
          console.log("no authToken")
        } else {
          console.log("authToken is ",authToken)
          localStorage.setItem('id_token', authToken);
        }
        return result;
      })
      .catch(this.handleError)
    .finally(()=> this.loaderService.hide()) //hide the spinner
  }

person Manu Chadha    schedule 29.05.2018    source источник


Ответы (1)


Импортируйте эту строку в свой компонент

импортировать {finalize,catchError,tap} из 'rxjs/operators';

Попробуйте этот код

 public signinUser(user:UserSigninInfo):any{

    this.loaderService.show(); //this shows a spinner
    return this.authService.authServiceSigninUser(user)
      .pipe(tap(response=>{
        console.log('response from backend service',response);
        let result= <HttpResponse<any>>response; 
        let authToken = result.headers.get("x-auth-token")
        if(authToken == null) {
          console.log("no authToken")
        } else {
          console.log("authToken is ",authToken)
          localStorage.setItem('id_token', authToken);
        }
        return result;
      })
      ,catchError(this.handleError)
    ,finalize (()=> this.loaderService.hide())); //hide the spinner
  }
person Vignesh    schedule 29.05.2018
comment
Спасибо. Попробую это. Кстати, finally тоже будет работать? - person Manu Chadha; 29.05.2018
comment
Если вы хотите использовать finally, используйте пакет rxjs-compact в файле package.json. - person Vignesh; 29.05.2018
comment
У меня есть "rxjs-compat": "^6.2.0" в package.json, поэтому мой исходный код не должен работать? - person Manu Chadha; 29.05.2018
comment
Ваш код сработал. Буду признателен, если вы сообщите мне, почему моя логика не сработала, хотя у меня rxjs-compact в package.json - person Manu Chadha; 29.05.2018
comment
Пакет @ManuChadha rxjs-compact поддерживает пакеты Angular5, а не пакеты angular6. - person Vignesh; 30.05.2018
comment
Давайте продолжим обсуждение в чате. - person Vignesh; 30.05.2018