2017-09-11 4 views
0

구독 방법을 실행할 때 내 문제가 발생하며 이유를 모르겠습니다. 이 코드이며, 오류가 콘솔에서 생성오류 TypeError : 정의되지 않은 속성 '속성'을 설정할 수 없습니다.

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) 
+0

서비스 코드를 공유 할 수도 있습니까? 여기에는 '속성'속성이 없습니다. – trichetriche

답변

1

귀하의 문제는 여기에있다. 당신은

.subscribe((data)=>{ 
    this.zones[i].numero=data 
}) 

에 대한 closure이다는 i 변수를 캡처하는 의미 같은 i 변수를 사용하고 있습니다.

이 코드는 asynchronously에서 작동합니다. 이 subscribe이 작동 할 것임을 의미합니다 (getNumberTotal 준비 완료).

코드가 처음 실행될 때 i0입니다. 이 줄에 도달하여이 함수를 다른 스레드 (Javascript 스레드가 아님)로 전달하여 실행합니다. 전화가 끝나면 자바 스크립트가 코드를 끝낼 때까지 기다렸다가 i 값인 this.zones.length을 기다립니다. 이벤트 루프는 구독자에 대한 콜백을 가져오고 this.zones[this.zones.length] 인 변수 i을보고 this.zones [this.zones [this.zones.length]]를 호출하려고하면 정의되지 않습니다. 그래서 왜 당신은 오류가 발생합니다.

var i 정의를 let i으로 바꿉니다. 각 반복에 대해 for loop이 자신의 i 변수를 생성하도록 만듭니다. 각 subscribe에는 자체 i이라는 캡처가 있습니다.

+0

감사합니다. Suren, 나는 당신의 제안을 따르고 나는 그 문제를 해결했습니다. –

관련 문제