2017-09-12 1 views
0

Je ne peux pas accéder à une variable de classe dans une méthode de classe.ceci. <variable> est indéfini dans la méthode

C'est ma classe:

[imports, decorator......] 
export class CardboardComponent implements OnInit { 
    operations: Operation[]; 
    workplaces: Workplace[]; 
    workplaceGroups: WorkplaceGroup[]; 
    rowLeadItems: String[]; 

    constructor(private cardboardService: CardboardService) { } 

    ngOnInit() { 
    this.getData(); 
    this.createRowLeadItems(); 
    } 

    getData() { 
    console.log('Data started'); 
    console.log(this); 
    this.cardboardService.getOperations() 
     .subscribe(operations => { 
     if (operations != undefined) { 
      this.operations = operations; 
     } 
     }); 
    console.log('Data finished'); 
    } 

    createRowLeadItems() { 
    console.log('Row Lead started'); 
    console.log(this); 
    console.log('Operations: ' + this.operations); 
    console.log('Row Lead finished'); 
    } 

} 

La sortie de la console ressemble à: Console

Je ne sais pas pourquoi this.operations est non défini à generateRowLeadItems(), quand "ce" fonctionne bien et je peux le voir dans la console.

+2

C'est parce que 'getOperations' (et tout ce que vous abonner à) est une opération asynchrone. Pensez-y comme 'setTimeout' – echonax

+0

votre' getData' se comporte async thats pourquoi son – Rahul

+0

non défini aussi ngOnInit appelle la fonction async? – mnlfischer

Répondre

0

en fait votre getdata est un asynchrone donc il en faudra pour obtenir des données de votre service à ce moment createRowLeadItems() sera exécuté avant que getdata() se termine. mieux appeler la fonction createRowLeadItems() à l'intérieur getdata()

supprimer l'appel createRowLeadItems() à l'intérieur du ngOnInit() puis appeler à l'intérieur du getdata()

getData() { 
    console.log('Data started'); 
    console.log(this); 
    this.cardboardService.getOperations() 
    .subscribe(operations => { 
     if (operations != undefined) { 
     this.operations = operations; 
     createRowLeadItems(); <-------- calling here 
     } 
    }); 
    console.log('Data finished'); 
}