首页 > 解决方案 > Ionic/Angular2 - 在 Page.ts 和 Provider.ts 之间插入一个“中介”

问题描述

我想知道它是否可能或至少是一个方向:在我的 Home.ts 和我的 Provider.ts 之间放置一个“中介”文件。

例如:在我的 Home.ts 上,我将调用一个getJson()方法,该方法将调用我的 MediatorgetJson()方法,该方法将调用我的 ProvidergetJson()方法。

原因是,认为这是一种很好的方法来处理和改进我收到的数据。

这是我在极度失败和沮丧中所尝试的...... :'(

主页.ts

ionViewDidLoad(){

   let observer: any = this.mediator.get().subscribe(
      (response: any) => this.get_success(response),
      (response: any) => this.get_fail(response));

}

private get_success(response: any): void {
   console.log('Sucess!', response)
}

private get_fail(response: any): void {
   console.log('Fail!', response)
}

HomeMediator.ts

get(): Observable<any>{
   let observer = this.dataService.get();

   observer.subscribe(
      (response: any) => this.get_success(response),
      (response: any) => this.get_fail(response));

   return observer;
}

get_success(res: Object){
   res['key'] = "VALOR";
   console.log('Ok!', res)
}

get_fail(res: any){
   console.log('Nops', res)
}

提供者.ts

public get(): Observable<Object> {
   return this.http.get(this.url)
      .map((response: Response) => response.json());

}

JSON文件

{
   "key": "value :D"
}

有什么帮助吗?我不一定需要使用 Observables .. 我仍在学习 Angular 和 Ionic ......谢谢大家的帮助!o/

标签: angularionic-frameworkionic2

解决方案


您订阅了两次,Observable可能是您的代码失败的原因。不应该这样做。我将提供回调的替代方案。我不会添加您的代码,Provider.ts因为该代码很好。


调解员

// add two paramter callbacks
get(successCallback, errorCallback): void {
  this.dataService.get().subscribe(
     response => { 
       this.get_success(response);
       // execute the callback function AFTER this.get_success is finished
       successCallback(response);
     }, error => {
       this.get_fail(error);
       errorCallback(error);
     }
  );
}

ionViewDidLoad() {

  // pass the functions to the mediator (without () )
  this.mediator.get(success, failure);
}

success(response: any) { /* some code */}
failure(error: any) { /* some code */}


推荐阅读