Wątek przeniesiony 2016-12-18 15:38 z Java przez Koziołek.

Angular 2 - undefined ?

0

Co może być powodem Undefined jak na screenie ?

0

"Problemem" jest kolejność wykonania kodu - kod z then wykonuje się dopiero po wykonaniu kodu synchronicznego:

 getPerson() {
    console.log('ddddddddddd: '+this._service.getPerson());
    this._service.getPerson()
      .then(/* tu są tylko rejestrowane funkje do wykonania po otrzymamniu odpowiedzi, nie ma tu wywołania funkcji, interpreter leci dalej */); 
 
    console.log('Error: '+this.errorMessage);
    console.log('Person: '+this.person);
  }

  // Dopiero teraz jak już nie ma synchronicznego kodu interpreter odpali funkcje z then (jeśli odpowiedź jest już gotowa)

Polecam zacząć od nauki podstaw JSa zamiast brać się za Angulara 2 i Typescript:

https://github.com/getify/You-Dont-Know-JS/blob/master/async%20&%20performance/README.md#you-dont-know-js-async--performance

Swoje console.log powinieneś wrzucić w kolejny then.

0

Zależy co chcesz osiągnąć - jak chcesz żby po prostu zadziałały Ci console.logi to wystarczy:

getPerson() {
  this._service
    .getPerson()
    .then((result) => {
      console.log('ddddddddddd:', result);
      return result;
    })
    .then(
      value => this.person = value,
      error =>  this.errorMessage = error
    )
    .then(() => {
      console.log('Error:', this.errorMessage);
      console.log('Person:', this.person);
    });
}

Aczkolwiek nie widzę sensu przypisywania errora do pola obiektu, przypisanie do this.person też jest średnio przydatne, bo i tak nie mozesz uzywać tej wartości bezpośrednio w innych metodach, bo może być nie ustawiona jeszcze.

Może pokaż cała klasę bo nawet nie wiadomo do czego ona służy.

1 użytkowników online, w tym zalogowanych: 0, gości: 1