Я пытаюсь избежать создания нескольких запросов, когда я использую 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"
Начиная с 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.
refCount()
качестве параметра pipe
, это нормально?