Я столкнулся с странной проблемой, когда услуга Http Angular2 (RC1) выполняет вызов http.post дважды. Я отлаживал свое приложение, и я знаю, что это не проблема с событием клика. Все вызовы, вызывающие основной вызов службы
public create(json: Object, params?: Object): Observable<T> {
let body = JSON.stringify([json]);
let headers = this.getHeaders();
let options = new RequestOptions({ headers: headers });
return this._http.post(this.createURL(this.getCreateURL(), [], params), body, options)
.map(res => this.handleObjectResponse(res));
}
запускаются один раз. Затем, когда я начал отслеживать проблему, я узнал, что мой обработчик this.handleObjectResponse
выполняется дважды. Поэтому я добрался дальше и достиг @angular/http/src/backends/xhr_backend.ts
, где они делают это
constructor(req: Request, browserXHR: BrowserXhr, baseResponseOptions?: ResponseOptions) {
this.request = req;
this.response = new Observable<Response>((responseObserver: Observer<Response>) => {
let _xhr: XMLHttpRequest = browserXHR.build();
_xhr.open(RequestMethod[req.method].toUpperCase(), req.url);
// load event handler
...
..
Итак, я поставил точку останова на this.request = req;
, а затем другую точку останова на let _xhr: XMLHttpRequest = browserXHR.build();
, и я узнал, что однажды ударил первую точку останова, но затем дважды ударил вторую точку останова из обратного вызова.
Это заставило меня замочить, поэтому я хотел проверить, может ли кто-нибудь, знакомый с внутренними элементами Angular2, пролить свет, похоже ли это на ошибку или что-то, что я сделал неправильно.
В моем коде я создал несколько абстрактных классов общих сервисов: GenericService и FullService, который расширяет GenericService. Оба эти являются абстрактными и используют generics, а реальные классы обслуживания, которые вводятся в различные компоненты, распространяются либо на GenericService, либо на FullService. Вы, ребята, думаете, что эта установка может быть ответственна за выполнение двойных сообщений?
Все идеи оценены!
Спасибо заранее!
P.S.
Это не происходит с get, но это также происходит с puts.