Angular 2:从http请求中恢复,并重做请求

时间:2016-03-30 07:56:03

标签: angular rxjs

我想使用angular 2和rxjs实现一些基本流程 这就是流程:

对于每个请求,用户都可以进入:

  1. 如果请求失败,请抓住错误
  2. 做一些异步(在后台重新登录)
  3. 如果成功重新发送失败的请求
  4. 如果失败则抛出错误。

    class MyHttpWrapper {
     ctor(private http:Http) {}
    
     get (url, options) {
         //Do some pre request things with the options and url
    
         return this.get(url,options)
                         .map(res => res.json())
                         .catch((err, source) => {
                              // Here i want to reloging
                              someService.login().subscribe(res => 
                               //Here i want to re-execute the original request and return it to the caller of the myHttpwrapper.get() caller
                              ).catch(err => 
                                  //return error to the caller of the myHttpWrapper.get() 
                              )                               
                         }
     }
    
  5. 我该怎么做?

1 个答案:

答案 0 :(得分:4)

我会尝试这样的事情:

return this.http.get(url,options)
           .catch((err, source) => {
             return someService.login()
                       .flatMap((res) => {
                         return this.http.get(url,options);
                       });
           })
           .map(res => res.json());

如果login和第二个get都出错,则会在subscribe方法的第二次回调中引发错误。