Я пытаюсь обновить запись компании, вызывающую API из моего приложения Angular2. Я заметил, что при отладке 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() срабатывал? И у вас есть еще места, где вы подписываетесь на update()? – Nikolai
Я поставил операторы console.log в событие click, и сам клик-событие запускается только один раз. Я обновил свой фрагмент кода, чтобы отразить это в моем ngOnInit(), который я подписываю, но этот вызов возвращает обещание, а не наблюдаемое. В противном случае я считаю, что это единственное место, которое я подписываю. – Flea