[英]ERROR TypeError: Cannot set property 'property' of undefined
我的問題是在我執行方法subscription時創建的,我不明白為什么。 這是代碼,並且錯誤在控制台中生成:
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 TypeError: Cannot set property 'numero' of undefined
at SafeSubscriber._next (allinfopark.component.ts:44)
at SafeSubscriber.webpackJsonp.../../../../rxjs/Subscriber.js.SafeSubscriber.__tryOrUnsub (Subscriber.js:238)
at SafeSubscriber.webpackJsonp.../../../../rxjs/Subscriber.js.SafeSubscriber.next (Subscriber.js:185)
at Subscriber.webpackJsonp.../../../../rxjs/Subscriber.js.Subscriber._next (Subscriber.js:125)
at Subscriber.webpackJsonp.../../../../rxjs/Subscriber.js.Subscriber.next (Subscriber.js:89)
at CatchSubscriber.webpackJsonp.../../../../rxjs/Subscriber.js.Subscriber._next (Subscriber.js:125)
at CatchSubscriber.webpackJsonp.../../../../rxjs/Subscriber.js.Subscriber.next (Subscriber.js:89)
at MapSubscriber.webpackJsonp.../../../../rxjs/operator/map.js.MapSubscriber._next (map.js:83)
at MapSubscriber.webpackJsonp.../../../../rxjs/Subscriber.js.Subscriber.next (Subscriber.js:89)
at XMLHttpRequest.onLoad (http.es5.js:1226)
您的問題在這里。 您正在使用相同的i
變量,它是封閉的
.subscribe((data)=>{
this.zones[i].numero=data
})
表示它捕獲了i
變量。
此代碼asynchronously
。 意味着在getNumberTotal
准備好之后,此subscribe
將可以工作。
當您的代碼第一次運行時, i
為0
。 它到達此行並將此函數傳遞給另一個線程(不是Javascript線程)以運行並繼續。 完成調用后,它將等待,直到您的Javascript Thread完成它的代碼為止,然后您獲得i
值this.zones.length
。 事件循環退出訂閱的回調,並在其中看到一個變量i
,該變量的值是this.zones[this.zones.length]
,當它嘗試調用this.zones [this.zones [this.zones.length]]時,它是未定義的。 那么,為什么會出現錯誤。
用let i
替換您的var i
定義。 它會為每個迭代強制for loop
以創建自己的i
變量,每個subscribe
都捕獲自己的i
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.