Angular - .publishLast не является функцией

1

Я пытаюсь избежать создания нескольких запросов, когда я использую async канал. У меня есть следующий запрос, чтобы получить пользователя от api

getUser() {
    this._user = this.http.get<User>(environment.baseAPIUrl + 'user')
      .pipe(
        tap((user: User) => {
          // login successful if there a jwt token in the response
          console.log(user);

          this.setIsVerified(user.verified);
          this.userReady = true;
        }),
        catchError((error: HttpErrorResponse) => {
            console.log(error.statusText);
            if (error.status === 403) {
              this.logout();
            }

            return throwError(error.error);
          }
        ))
      .publishLast()
      .refCount();;
  }

но когда я пытаюсь запустить приложение, у меня есть следующая ошибка:

ERROR TypeError: this.http.get(...).pipe(...).publishLast is not a function

Я попытался добавить import {catchError, tap, publishLast} from 'rxjs/operators'; но проблема сохраняется.

Я использую Angular 6 и "rxjs": "^6.1.0"

  • 0
    что ты имеешь ввиду, извини?
  • 0
    какая версия rxjs?
Показать ещё 2 комментария
Теги:
angular
rxjs

1 ответ

0
Лучший ответ

Начиная с RxJS v6.x, вам нужно поместить publishLast() в качестве параметра (аргумента) для pipe, что-то вроде следующего:

 getUser() {
      this._user = this.http.get<User>(environment.baseAPIUrl + 'user')
        .pipe(
          tap((user: User) => {
            // login successful if there a jwt token in the response
            console.log(user);

            this.setIsVerified(user.verified);
            this.userReady = true;
          }),
          catchError((error: HttpErrorResponse) => {
              console.log(error.statusText);
              if (error.status === 403) {
                this.logout();
              }

              return throwError(error.error);
            }
          ),
          publishLast()
        )

        .refCount();;
    }

Вам не следует publishLast() как вы это делали в RxJS v5.0.

  • 0
    да, это работает, спасибо. Но я должен добавить также refCount() качестве параметра pipe , это нормально?
  • 0
    Да, refCount () автоматически подписывается и отписывается, когда подписчики приходят и уходят. Если вы хотите избежать refCount (), вы можете использовать shareReplay (1) вместо publishLast ().
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню