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
是这种情况下的唯一问题。所以我怀疑所有的订阅可能是这个问题的另一个原因,结果证明不是真的:)
例如:
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
是这种情况下的唯一问题。所以我怀疑所有的订阅可能是这个问题的另一个原因,结果证明不是真的:)