2017-02-08 12 views
0

呼び出しています5回にもかかわらず、HTTPリクエスト:useronjがコンソールに5回印刷されます角度2つの負荷私は例えば、一度だけ

ngOnInit() 
    { 
     this.user = new User(); 
     this.result = new Result(); 
     this.route.params 
      .switchMap((params: Params) => this.user.id = params['id']) 
      .subscribe((user: User) => this.getUser()); 
    } 
    getUser() 
     { 
      this.result.updateInfo("getting records...") 
      this.user.id = this.user.id.toLowerCase(); 
      this._serivce.getUser(this.user.id).subscribe(userobj => 
      { 
       this.user = userobj; 
       console.log(userobj);//five times 
      },error => this.result.updateError(error)); 

     } 

。 サービス:

getUser(id: string) { 
    return this.http.get(<url>, { headers: this.headers }) 
     .map(this.extractData) 
     .catch(this.handleError); 
    } 

更新:のみngOnInitはそれも一度だけ、getUserメソッドを呼び出します!

+0

どのメソッドがgetUser()を呼び出すかによって異なります。この例のコード全体を投稿する必要があります。 – Picci

答えて

0

switchMapを使用する理由はありますか?あなたはまた、そこに購読している多くのことをしています、それは問題を引き起こす可能性があります。あなたはidパラメータによって、ユーザーを取得しているように思われ、達成しようとしているので、これはトリックを行う必要があります。

ngOnInit() { 
    this.route.params 
    .subscribe(params => { 
     let id = params['id']; 
     this._service.getUser(id.toLowerCase()) 
      .subscribe(userobj => { 
       console.log(userObj); 
     }); 
     }); 
} 

EDIT:追記として、OP(からのコメントあたりをコメントする傾向があるので、気づかない)このケースではswitchMapが唯一の問題であることが判明しました。だから私の疑惑は、すべての購読がこの問題の追加の原因になる可能性があり、真ではないことが判明しました:)

+0

ありがとうございます。ユーザーのロードを5回停止しました。 SwitchMapを指摘してくれてありがとう、それが問題でした。すべての方法を休んで、私はそれをそのまま残しました。それらは他の方法で使用されているためです。 – Smit

+1

ええ、大丈夫です。私はswitchmapで同様のセットアップを試しましたが、私には8つのアップデートが発生しました:Dしかし、うまく、それは考え出されました:) – Alex

関連する問題