angular - ERROR TypeError: Cannot set property 'property' of undefined -
my problem created when execute method subscribe, , don't understand why. code , error generates in console:
getinfo(idgestore:number){ let zonaobs=this._zonaservice.getinfoparks(idgestore); zonaobs.subscribe(data=>{ this.zones=data; var citta:string; for(var i=0;i<this.zones.length;i++){ // this.zones[i].citta=null; this.location.lat=this.zones[i].latitudine; this.location.lng=this.zones[i].longitudine; this._zonaservice.getcity(this.location) .subscribe((data)=>{ citta=data; }) console.log(this.zones[i].id); var id_zona=this.zones[i].id; console.log(id_zona) this._tipologiazonaservice.getnumbertotal(id_zona) .subscribe((data)=>{ this.zones[i].numero=data }) console.log(this.zones) } }); } error:
error typeerror: cannot set property 'numero' of undefined @ safesubscriber._next (allinfopark.component.ts:44) @ safesubscriber.webpackjsonp.../../../../rxjs/subscriber.js.safesubscriber.__tryorunsub (subscriber.js:238) @ safesubscriber.webpackjsonp.../../../../rxjs/subscriber.js.safesubscriber.next (subscriber.js:185) @ subscriber.webpackjsonp.../../../../rxjs/subscriber.js.subscriber._next (subscriber.js:125) @ subscriber.webpackjsonp.../../../../rxjs/subscriber.js.subscriber.next (subscriber.js:89) @ catchsubscriber.webpackjsonp.../../../../rxjs/subscriber.js.subscriber._next (subscriber.js:125) @ catchsubscriber.webpackjsonp.../../../../rxjs/subscriber.js.subscriber.next (subscriber.js:89) @ mapsubscriber.webpackjsonp.../../../../rxjs/operator/map.js.mapsubscriber._next (map.js:83) @ mapsubscriber.webpackjsonp.../../../../rxjs/subscriber.js.subscriber.next (subscriber.js:89) @ xmlhttprequest.onload (http.es5.js:1226)
your problem here. using same i variable closure
.subscribe((data)=>{ this.zones[i].numero=data }) means captures i variable.
this code works asynchronously. means subscribe work, after getnumbertotal ready.
when code runs first time, i 0. reaches line , pass function thread (not javascript thread) run , continues. when finishes call, waits until javascript thread finishes it's code , after i value this.zones.length. event loop gets out callbacks subscribes , see there variable i value this.zones[this.zones.length] , when tries call this.zones[this.zones[this.zones.length]], undefined. why error.
replace var i definition let i. forces for loop each iteration create it's own i variable, each subscribe has captures it's own i.
Comments
Post a Comment