Ionic/Angular2 - 在 Page.ts 和 Provider.ts 之间插入一个 "mediator"

Ionic/Angular2 - Inserting a "mediator" between Page.ts and Provider.ts

我想知道它是否可能或至少是一个方向: 在我的 Home.ts 和我的 Provider.ts.

之间放一个 "mediator" 文件

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

原因是,我认为这是对我收到的数据进行处理和改进的好方法。

这是我尝试过的极端失败和挫折....:'(

Home.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)
}

Provider.ts

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

}

JSON 文件

{
   "key": "value :D"
}

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

您在 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 */}