【发布时间】:2017-05-31 04:38:10
【问题描述】:
我正在尝试在我的 Angular2 应用程序上实现刷新令牌。 我采取了一种乐观的方法,而不是在发出请求之前检查访问令牌是否过期,而是发出请求,如果它返回 401 代码,我将通过请求新的访问令牌并将其保存到本地存储来刷新访问令牌.
这是我的代码 sn-p:
getWithParams<T>(serviceUrl: string, params: URLSearchParams): Observable<T> {
return super.getWithParams<T>(serviceUrl, params)
.retryWhen((error) => {
return error
.filter((e) => e.status === 401)
.scan((acc, value) => {
return acc + 1;
}, 0)
.takeWhile(acc => acc < 3)
.flatMap(() => this.tokenRefreshService.refreshToken())
.delay(1000);
});
}
值得一提的是,super.getWithParams 通过从本地存储中检索请求标头来设置访问令牌。
方法调用tokenRefreshService.refreshToken()获取一个新的访问令牌并保存到本地存储。
我面临的问题是,当重试请求时,它使用的是旧的访问令牌,也就是说,它没有调用 super.getWithParams 再次重建请求。它只是重试现有的 observable。
有没有办法再次构建请求?或链接失败的可观察对象的请求标头?
【问题讨论】:
标签: angular typescript rxjs observable