簡體   English   中英

錯誤TypeError:無法設置未定義的屬性'property'

[英]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將可以工作。

當您的代碼第一次運行時, i0 它到達此行並將此函數傳遞給另一個線程(不是Javascript線程)以運行並繼續。 完成調用后,它將等待,直到您的Javascript Thread完成它的代碼為止,然后您獲得ithis.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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM