Co może być powodem Undefined jak na screenie ?
"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.
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.
Zarejestruj się i dołącz do największej społeczności programistów w Polsce.
Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.