2016-10-01 133 views
0

我有一个自定义http服务,它覆盖默认的角度2 http服务。此服务设置自定义默认选项,并在请求开始时设置加载器,并在请求完成时隐藏加载器。Angular 2 http捕获可观察问题

我也想添加,如果从服务器收到未授权错误(401,403)的情况下,将用户重定向到登录页面的功能。例如下面是我的HTTP方法

get(url: string, options?: RequestOptionsArgs): Observable<any> { 
     this.setLoadingStatus(); 
     options = this.prepareOptions(options); 
     let that = this; 
     return super.get(url, options) 
      .map(res => { 
       this.clearLoadingStatus(); 
       return res.json(); 
      }) 
      .catch(function (err) { 
       //redirects user to login and display alert 
       that._gs.alertUnauthorized(); 
       return Observable.empty(); 
      }); 
    } 

但是,当测试在IE浏览器做了保护的页面的请求,在未经授权的请求的情况下返回401,这行的也重定向到登录页面,但下面的错误控制台显示:

GET http://localhost:49547/api/protected/ 401 (Unauthorized) 
EXCEPTION: Observable_1.Observable.empty is not a function 
ORIGINAL STACKTRACE: 
TypeError: Observable_1.Observable.empty is not a function 

任何人都可以指导吗?

+0

尝试'super.get()图((RES)=> {},(ERR)=> {});'的语法? –

回答

2

您需要导入empty功能:

import 'rxjs/add/observable/empty' 
+0

谢谢,这很有帮助。请指导一下,如果在这种情况下使用Observable.empty()是否合适,还有其​​他更好的选择吗? –

+0

我仍然看到在控制台“zone.js:1274 GET http:// localhost:49547/proteccted/401(未授权)”中打印的下面的错误行,它可以吗?还是需要处理的例外情况? –

+0

我认为这只是一个调试的事情。返回Observable.empty()可以抑制错误,所以如果这就是你想要的,那你就是金。 – j2L4e