Angular 2 加载 HTTP 请求 5 次,即使我只调用一次

Angular 2 loads HTTP request 5 times even though i am calling only once

例如:

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

更新:只有 ngOnInit 调用 getUser,那也只有一次!

您使用 switchMap 有什么原因吗?您还在那里进行了大量订阅,这可能会导致问题。您要实现的目标似乎是通过 id 参数获取用户,所以这应该可以解决问题:

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

编辑:作为旁注,根据来自 OP 的评论(因为评论往往被忽视)原来 switchMap 是这种情况下的唯一问题。所以我怀疑所有的订阅可能是这个问题的另一个原因,结果证明不是真的:)