Я столкнулся с странной проблемой, когда служба Http Angular2 (RC1) Http выполняет вызов http.post дважды. Я отлаживал свое приложение, и я знаю, что это не проблема с событием клика. Все вызовы, ведущие на основной вызов службыAngular2 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.
Это не происходит, но это случается и с puts.
Вы можете поделиться кодом звонка? возможно, существует несколько подписей на наблюдаемые, в этом случае 'return this._http.post (this.createURL (this.getCreateURL(), [], params), body, options) .map (res => this.handleObjectResponse (res)). share(); ' должен решить его https://github.com/Reactive-Extensions/RxJS/blob/master/doc/api/core/operators/share.md – teleaziz
Святое дерьмо! Большое вам спасибо, что действительно разрешило это. Теперь мне просто нужно оборачивать голову тем, что я сделал, чтобы вызвать это в первую очередь. Не стесняйтесь публиковать это как ответ, поэтому я могу принять его и снова поблагодарить тонну !!!! – RVP