Mi sono imbattuto in un problema strano in cui il servizio Http di Angular2 (RC1) esegue la chiamata http.post due volte. Ho eseguito il debug della mia app e so per certo che questo non è un problema relativo all'evento click. Tutte le chiamate che portano al servizio principale chiamanoAngular2 http.post viene eseguito due volte
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));
}
vengono eseguite una volta. Poi, quando ho iniziato a rintracciare il problema, ho scoperto che il mio gestore this.handleObjectResponse
viene eseguito due volte. Così Ho approfondito ulteriormente e ha raggiunto @angular/http/src/backends/xhr_backend.ts
dove fanno questo
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
...
..
così ho messo un punto di interruzione this.request = req;
e poi un altro punto di interruzione let _xhr: XMLHttpRequest = browserXHR.build();
e ho scoperto che mi ha colpito il primo punto di interruzione una volta, ma poi mi ha colpito il secondo punto di interruzione dal richiamata due volte.
Questo mi ha fatto impazzire quindi volevo verificare se qualcuno che ha familiarità con gli interni di angular2 potrebbe far luce se questo sembra un bug o qualcosa che ho fatto di sbagliato.
Nel mio codice sono state create alcune classi di servizi generici astratti: GenericService e FullService che estende GenericService. Entrambi sono astratti e usano i generici e le classi di servizio reali che vengono iniettate nei diversi componenti estendono sia GenericService che FullService. Ragazzi, pensate che questa installazione possa essere responsabile delle doppie esecuzioni?
Tutte le idee sono apprezzate!
Grazie in anticipo!
P.S.
Questo non succede con ottiene ma succede anche con puts.
Puoi condividere il codice chiamante? forse c'è un subscribe multiplo sull'osservabile, in questo caso 'return this._http.post (this.createURL (this.getCreateURL(), [], params), body, options) .map (res => this.handleObjectResponse (res)). share(); ' dovrebbe risolverlo https://github.com/Reactive-Extensions/RxJS/blob/master/doc/api/core/operators/share.md – teleaziz
Santo schifo! Grazie mille - questo ha davvero risolto il problema. Ora ho solo bisogno di avvolgere la mia mente su quello che ho fatto per causare questo in primo luogo. Sentiti libero di postare questa risposta come risposta, così posso accettarla e grazie ancora una tantum !!!! – RVP