2017-02-08 7 views
0

Например:Угловые 2 нагрузок HTTP запрос в 5 раз, даже если я звоню только один раз

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

     } 

useronj распечатан пяти раз в консоли. Услуги:

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

Update: Только ngOnInit называет GetUser, что тоже только один раз!

+0

Это зависит от того, какие методы вызывают getUser(). Вы должны опубликовать весь код примера. – Picci

ответ

0

Есть ли причина, по которой вы используете switchMap? Вы также много подписались там, что может вызвать проблему. То, что вы пытаетесь достичь, который, кажется, становится пользователем параметром ид, так что это должно сделать трюк:

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

EDIT: Как заметка на полях, на комментарий от ОП (с комментариями имеют тенденцию идти незамеченным). Оказалось, что switchMap был единственной проблемой в этом случае. Поэтому мое подозрение, что все подписки может стать дополнительной причиной для этой проблемы, оказалось неправдой :)

+0

Спасибо. Он прекратил загрузку пользователя пять раз. И спасибо, что вы указали SwitchMap. Оставь все методы, я оставил их как есть. Потому что они используются в других методах. – Smit

+1

Да, ладно, я понимаю. Я попробовал аналогичную настройку с коммутатором, для меня это вызвало 8 обновлений: D Но да, хорошо, что это было выяснено :) – Alex