老师,为什么BehaviorSubject的值改不了,在方法中的值已经更改了,在方法外获取的值怎么还是初始化的值,代码如下。
来源:6-6 Observable 的冷和热以及 Subject

慕斯卡11664660
2018-09-02
import { Injectable } from "@angular/core";
import { HttpInterceptor, HttpRequest, HttpHandler, HttpEvent, HttpHeaders } from "@angular/common/http";
import { Observable, throwError, BehaviorSubject } from "rxjs";
import { catchError, filter, take, switchMap } from "rxjs/operators";
import { AuthService } from "./services/auth.service";
@Injectable()
export class ErrorInterceptor implements HttpInterceptor {
private refreshTokenSubject: BehaviorSubject<any> = new BehaviorSubject<any>(
null
);
constructor(private auth: AuthService) {
}
intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
let accToken;
return next.handle(request).pipe(catchError(err => {
if (err["error"]["error"] === "invalid_token") {
this.auth.refreshToken().subscribe(data => {
this.refreshTokenSubject.next(data["access_token"]);
console.log('access_token:'+JSON.stringify(this.refreshTokenSubject['_value']));
})
// add authorization header with jwt token if available
request = request.clone({
setHeaders: {
Authorization: `Bearer ${JSON.stringify(this.refreshTokenSubject['_value'])}`
}
});
return next.handle(request);
}
if (err.status === 401) {
// auto logout if 401 response returned from api
// location.reload(true);
}
const error = err.error.message || err.statusText;
return throwError(error);
}))
}
}
1回答
-
接灰的电子产品
2018-09-03
使用 Rx 应该牢记的一点是它是异步的,也就是说你的代码中在你所谓的内部调用了 refershToken 之前,“外部”的语句已经执行了
012018-09-05
Angular打造企业级协作平台,让你在Angular领域中出类拔萃
998 学习 · 536 问题
相似问题