2
我正在尝试更新从我的Angular2应用程序调用API的公司记录。我在调试时注意到http调用正在执行两次。我发现另一个stackoverflow thread,这是相同的,答案是加入.share()
由于热和冷观测。我已将此添加到我的http呼叫中,但这并未解决问题。我感谢任何帮助!http.put请求在Angular2中执行两次
company.service.ts
update(company: Company): Observable<Company> {
return this._http.put(URL_COMPANY, JSON.stringify(company), { headers: this.headers })
.map((res: Response) => company).share();
}
getCompanies() {
return this._http.get(URL_COMPANY)
.map((response: Response) => response.json()).share()
.catch(this.handleError);
}
getCompany(id: number): Promise<Company> {
const url = `${URL_COMPANY}/${id}`;
return this._http.get(url)
.toPromise()
.then(response => response.json() as Company)
.catch(this.handleError);
}
company.component.ts
ngOnInit(): void {
this.route.params.switchMap((params: Params) => this.companyService.getCompany(+params['id']))
.subscribe(company => this.company = company);
}
save(): void {
this.companyService.update(this.company).subscribe(
(worked) => { console.log("success")},
(error) => { console.log("failed")}
);
}
你的方法save()和update()触发了多少次?你有另一个地方你订阅更新()? – Nikolai
我已经在click事件中放置了console.log语句,并且click事件本身仅被触发一次。我更新了我的代码片断,以反映我在ngOnInit()中所做的订阅,但此调用返回一个承诺而不是可观察的。否则,我相信这是我订阅的唯一地方。 – Flea