2016-09-30 12 views
7

Zapoznaję się z Angular2, Ionic2 i może nie rozumiem czegoś, ale miałem nadzieję na pomoc.Zwrot wartości obietnicy w Angular 2, Ionic 2

Mam dostawcę o nazwie "CurrentUser" w celu przechowywania i pobierania danych LocalStorage.

 getProfile(): any { 
     this.local.get("user-profile").then((profile) => { 
     var val = JSON.parse(profile); 
     return val; 
    }); 
} 

funkcja ta getProfile() zwraca obietnicę

Gdybym wstrzyknąć tego dostawcę do komponentu. Jak mam czekać na obietnicę rozwiązania przed przypisaniem danych podczas wywoływania tej funkcji z komponentu ?.

@Component({ 
    templateUrl: 'build/pages/book_meeting/book_meeting.html' 
}) 
export class BookMeetingPage implements OnInit { 
constructor(public navCtrl: NavController, private _currentUser: CurrentUser) { 
} 

profile: IProfile; 

    ngOnInit(): any { 
    this.profile = this._currentUser.getProfile(); 
    console.log(this.profile);//returns undefined 
    } 
} 

Odpowiedz

9

Przede wszystkim trzeba zwrócić this.local.get("user-profile") obietnicę od getProfile funkcji tak, że może łańcuch podczas rozmowy. Następnie można uzyskać dane zwracane z funkcji getProfile w oddzwonieniu do powodzenia .then.

getProfile(): any { 
    return this.local.get("user-profile").then((profile) => { 
     var val = JSON.parse(profile); 
     return val; 
    }); 
); 

Dodatkowo nie można uzyskać dane jak najszybciej dokonać ajax, na sukcesie nim można uzyskać odpowiedź

ngOnInit(): any { 
    this._currentUser.getProfile().then(
    value => { console.log(value) } 
    ) 
} 
+0

Cześć, mam app.bundle.js błędach: 44529 WYJĄTEK: Błąd: Uncaught (in promise): TypeError: Nie można odczytać właściwości "then" z undefined. – Arianule

+0

@Arianule przepraszam, że wspomniałem w odpowiedzi, ale zapomniałem zmienić to samo w części kodu, moje złe. Dzięki za odbiór. Sprawdź zaktualizowany kod –

+0

Witam, Pankaj. Czy zaktualizowałeś kod, przepraszam. czy powinienem zwrócić Obietnicę ... coś na wzór zwrotu Promise.resolve (val)? – Arianule

0

Twoja funkcja getProfile nie zwraca obietnicy. Nic nie zwraca. należy go zmienić na

getProfile(): any { 
    return this.local.get("user-profile").then((profile) => { 
    var val = JSON.parse(profile); 
    return val; 
}); 

Teraz w składniku, można wyodrębnić dane ze zmiennej profil obietnicy.

ngOnInit(): any { 
    this._currentUser.getProfile().then(value => { 
     console.log(value); //returns your value. 
    } 
Powiązane problemy