IONIC 3:从休息提供程序中的句柄错误函数发布事件

时间:2018-03-21 23:07:45

标签: events ionic-framework provider

我希望我们可以帮助我。我是离子框架的初学者。 我有一个带有restfull api服务器端的应用程序。我让一个休息提供者客户端与这个api进行交互:

在这个提供程序中,我有一个函数来处理每个请求中的错误。当状态代码为401时,我想发布一个事件“session:expired”,以便在我的app.component.ts中捕获它,将用户重定向到登录页面。

例如我的代码示例:

@Injectable()
export class RestProvider {
.......
myApiUrl = https://......

  constructor(public http: HttpClient,
              public loadingCtrl: LoadingController,
              public loader: LoaderProvider,
              public events: Events) {

  }
/***
   * API REST FOR USER WEBSERVICE
   */  
  getUsers(params=null): Observable<Student[]> {            
    return this.http.get(this.myApiUrl + "/users", { params: params, headers:this.customHeader })
                    .map(this.extractData)                    
                    .catch(this.handleError);                
  }

...........

 private extractData(res: Response) {
   console.log(res);   
   let body = res;
   return body || { };    
 }

private handleError (error: Response | any) {
  ...
    if(error.status == 401)
    {
      console.log("Status Error 401 : " + error.status);
      this.events.publish('session:expired');
   }
    return ......
  }

我的问题:handleError(或extractData)函数中的“this.event.publish”不起作用,在控制台中没有错误地破坏/冻结我的应用程序?

如果我在getUsers函数中发布了一个有效的事件(但没有兴趣):

  getUsers(params=null): Observable<Student[]> {         
    this.events.publish('session:expired');
    return this.http.get(this.myApiUrl + "/users", { params: params, headers:this.customHeader })
                    .map(this.extractData)                    
                    .catch(this.handleError);                
  }

是否可以在地图中发布事件或捕获http对象的功能?也许我没有“好的做法”?

提前感谢您,对不起我的英语:/

0 个答案:

没有答案