代码之家  ›  专栏  ›  技术社区  ›  Rafael de Castro

离子型/角型2-在页面之间插入“中介体”。ts和提供商。ts

  •  0
  • Rafael de Castro  · 技术社区  · 7 年前

    我想知道是否有可能或者至少有一个方向: 在我家之间放一个“调解人”文件。ts和我的提供商。ts。

    例如: 在我家。我会打电话给 getJson() 方法调用我的中介 getJson() 将调用我的提供程序的方法 getJson()

    原因是,我认为这是一个很好的方法,可以对我收到的数据进行处理和细化。

    以下是我在极度失败和挫折中所做的尝试:'(

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

    家庭调解员。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"
    }
    

    有什么帮助吗?我不一定需要使用可观察的。。我还在学习角度和离子。。。谢谢大家的帮助!o/

    1 回复  |  直到 7 年前
        1
  •  1
  •   Ivar Reukers    7 年前

    您在上订阅了两次 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 */}