【发布时间】:2017-07-18 18:04:34
【问题描述】:
我有这个功能。我想要这些行:
this.setHeaders(url);
return this.request(url, options);
在this.refreshTokenService.wait === false时执行。
private catchErrors(url: string | Request, options?: RequestOptionsArgs) {
return (res: Response) => {
if (res.status === 401 || res.status === 403) {
if (this.refreshTokenService.wait === false) {
console.log('FIRST');
this.refreshTokenService.wait = true;
return this.refreshTokenService.refreshToken(localStorage.getItem('JWToken'))
.flatMap((result: any) => {
// if got new access token - retry request
localStorage.setItem('JWToken', JSON.parse(result._body).token);
this.setHeaders(url);
this.refreshTokenService.wait = false;
return this.request(url, options);
})
} else {
// TODO here
this.setHeaders(url);
return this.request(url, options);
}
} else {
Observable.throw(res);
}
};
}
但该函数只想返回可观察对象或承诺顺利运行。
谢谢
request(url: string | Request, options?: RequestOptionsArgs): Observable<Response> {
if (typeof url === 'string') {
if (!options) {
options = {headers: new Headers()};
}
this.setHeaders(options);
} else {
this.setHeaders(url);
}
return super.request(url, options).catch(this.catchErrors(url, options));
}
【问题讨论】:
-
this.request(url,options) 返回什么?
-
另外,您能否具体说明您遇到的实际错误是什么?
-
不是输出错误。在我获得新令牌之前,它会不断尝试运行以下请求。我想先获取新令牌,然后继续处理所有其他请求。
-
我认为这个函数返回一个 observable。无论如何,我想在 this.refreshTokenService.wait === false 时返回这个函数
-
我尝试了这个,但是没有用 return new Promise(function (resolve, reject) { resolve( this.request(url, options) ); });
标签: angular rxjs angular-observable