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

时间:2017-02-08 09:30:51

标签: http angular angular2-services

例如:

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,这也只调用一次!

1 个答案:

答案 0 :(得分:0)

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

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

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