2016-09-30 2 views
7

Я знакомлюсь с Angular2, Ionic2 и Возможно, я что-то не понимаю, но надеялся на помощь.Возвращение значения обещания в Angular 2, Ionic 2

У меня есть провайдер под названием «CurrentUser» для хранения и получения данных LocalStorage.

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

эта функция возвращает getProfile() обещание

Если я впрыснуть этот поставщик в качестве компонента. Как я буду ждать обещания решить, прежде чем назначать данные при вызове этой функции из компонента ?.

@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 
    } 
} 

ответ

9

Прежде всего, вы должны вернуть this.local.get("user-profile") обещание от getProfile функции так, что она может цепь, когда вы звоните. После этого вы можете получить данные, возвращаемые функцией getProfile, в .then успешный обратный вызов.

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

Кроме того, вы не можете получить данные, как только вы сделаете Аякс, на успехе этого вы можете получить ответ

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

Привет там, я получаю app.bundle.js ошибки: 44529 ИСКЛЮЧЕНИЕ: Ошибка: нечистота (в обещании): TypeError: Невозможно прочитать свойство «then» неопределенного. – Arianule

+0

@ Arianule жаль, что я упомянул в ответ, но забыл изменить то же самое в части кода, мой плохой. Спасибо за хедз-ап. Проверить обновленный код –

+0

Привет, Pankaj. Извините, вы обновили код. Должен ли я вернуть обещание ... что-то по линии возврата Promise.resolve (val)? – Arianule

0

Ваша функция getProfile не возвращает обещание. Он ничего не возвращает. Вы должны изменить его

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

Теперь в компоненте, вы можете извлечь данные из переменного профиля посыла.

ngOnInit(): any { 
    this._currentUser.getProfile().then(value => { 
     console.log(value); //returns your value. 
    } 
Смежные вопросы