Pie*_*nry 7 rxjs typescript angular
我试图重现以下基于Angular2的Ionic2应用程序中使用Angular 1.x拦截器和承诺成功实现的行为:
如果状态代码是401,那么
一个.再提出注册客户的请求.这将提供一些我随后可以附加到每个请求的令牌.
湾 重试orignal请求并通过promise/observable将结果提供给调用者
如果错误状态是401之外的其他任何内容,则只需将流程正常地传递给调用者
注意:注册过程不需要用户的任何干预(没有登录),所以我希望它对用户完全透明.我首次加载应用时注册一次,但会话最终会过期,我需要自动重新注册.
这是原始的Angular 1实现(我只包括responseError
拦截器的一部分):
responseError : function(rejection){
if(rejection.status == 401){
$log.info('Intercepting unauthorized 401 response. Will try to re-register the session and retry the request.');
var security = $injector.get('SecurityService');
var $http = $injector.get('$http');
return security.registerSession().then(function(){
return $http(rejection.config);
});
}else{
return rejection;
}
}
Run Code Online (Sandbox Code Playgroud)
现在,我已经包装了Angular2的HTTP服务,我可以做一些简单的事情,比如为每个请求添加一个标头.但是,我正在努力使用Angular2和Observables重现相同的行为.
到目前为止我的尝试,这是我的服务将调用的HTTP包装器的请求方法:
request(url: string | Request, options?: RequestOptionsArgs): Observable<Response> {
let req: Request = this.buildRequest(url, options);
this.beforeCall(req);
var observable = this.http
.request(req)
.retry(3)
.catch(res => {
debugger;
console.log("ERROR! " + res.status);
if(res.status == 401){
this.logger.log('Unauthorized request. Trying to register the session and then retry the request.');
return this.securityService.registerSession().subscribe(() => {
// What to do here so the client gets the result of the original request ??
});
}
})
.do((res:Response) => { this.afterCall(req, res) });
return observable;
}
Run Code Online (Sandbox Code Playgroud)
在使用observables的flatMap运算符初始化会话后,您可以再次执行请求:
var observable = this.http
.request(req)
.retry(3)
.catch(res => {
debugger;
console.log("ERROR! " + res.status);
if(res.status == 401){
this.logger.log('Unauthorized request. Trying to register the session and then retry the request.');
return this.securityService.registerSession().flatMap(() => {
return this.http.request(req); // <--------
});
}
})
.do((res:Response) => { this.afterCall(req, res) });
return observable;
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
13752 次 |
最近记录: |