2017-09-13 2 views
0

Ce problème devrait être assez simple: je veux pousser l'état de chaque requête dans un tableau appelé currentValues. Malheureusement, le currentValues-tableau reste dépeuplé (la sortie des valeurs de contrôle est 0vs2. Qu'est-ce que je manque ici?Le push de tableau ne fonctionne pas correctement

@Input() public wantedValue: string[]; 
    @Input() public querySensor: string[]; 
    @Input() public slideId: number; 
    @Output() wantedStateAccievedEvent: EventEmitter<any> = new EventEmitter<any>(); 
    public currentValues: string[] = []; 

    initItems() { 
    for (let sensor of this.querySensor) { 
     console.log("Sensor: " + sensor); 
     this.itemService.getMockItemState(sensor).subscribe(
     status => { this.currentValues.push((status)); }); 
    } 
    this.checkValues(); 
    } 

    checkValues(): void { 
    console.log("Called checkValues" + this.currentValues.length + "vs " + this.wantedValue.length); 
    let i = 0; 
    let allSatisfied: boolean; 
    for (let value of this.currentValues) { 
     console.log("Wert: " + value + '\n'); 
     if (this.wantedValue[i] !== value) { 
     allSatisfied = false; 
     } 
     i++; 
    } 
    if (allSatisfied === true) { 
     this.wantedStateAccievedEvent.emit({slideId: this.slideId, stateAccieved: true }); 
    } 
+0

double possible de [angulaire 2 - Renvoyer les données directement à partir d'un Observable] (https://stackoverflow.com/questions/37867020/angular-2-return-data-directly-from-an-observable) – jonrsharpe

+0

Avez-vous vérifié quelle est la valeur de 'status'? Quelle est la sortie si vous ajoutez ceci: 'console.log (status ');'? – mok

+0

Salut, le statut a toujours une valeur - le tout fonctionnait sans utiliser de tableaux, après avoir changé wantedVaule et querySensor en tableaux le problème est apparu – jibjapda

Répondre

0

Vous abonner à un événement asynchrone avec this.itemService.getMockItemState(sensor).subscribe. Il est donc possible que lorsque vous appelez this.checkValues() l'événement n'a pas été déclenché déjà

Essayez reporter la this.checkValues() pendant quelques secondes de remplissage ou de déplacer l'appel dans la fonction s'abonner.

this.itemService.getMockItemState(sensor) 
    .subscribe(status => { 
    this.currentValues.push(status); 
    this.checkValues(); 
    }); 
+0

Salut merci pour la réponse - cela fonctionne, j'ai changé le code pour: re suggestion, mais maintenant le tableau grandit énorme! même avec 'pour (laissez-moi dans this.querySensor) { console.log (" Sensor: "+ this.querySensor [i]); this.itemService.getMockItemState (this.querySensor [i]). Subscribe ( status => { this.currentValues ​​[i] = état; }); this.checkValues ​​(); }} ' Le tableau devient plus - mon service Mok: ' getMockItemState (item: String): Observable { retour Observable.interval (500) .map (() => 'OUVERT'); } ' – jibjapda

+0

Il a effectivement travaillé exactement de cette façon à la fin - merci pour votre aide – jibjapda