2016-09-30 10 views
7

私はAngular2、Ionic2、および に慣れているかもしれませんが、私は何か誤解していますが、助けを求めていました。角度2の約束値を返す、イオン2

LocalStorageデータを格納して取得するために、私は 'CurrentUser'というプロバイダを持っています。

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

I成分にこのプロバイダを注入する場合約束

を返す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

あなたが呼ぶとき、それが連鎖することができるようgetProfile関数からthis.local.get("user-profile")約束を返す必要がまず第一。その後、getProfileから返されたデータを.then成功コールバックで機能させることができます。

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

さらに私は、エラーapp.bundle.jsを取得し、あなたがそこに応答

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

こんにちはを得ることができ、それの成功を、とすぐにAJAXを行い、データを取得することはできません。 44529例外:エラー:未知(約束):TypeError:未定義のプロパティ 'then'を読み取ることができません。 – Arianule

+0

@Arianule申し訳ありませんが私は答えで言及しましたが、コード部分で同じことを変えるのを忘れました。ヘッドアップありがとう。更新されたコードを確認してください –

+0

こんにちはPankaj。あなたはコードを更新しました、ごめんなさい。プロミスを返さなければなりません...プロミスの返品ラインに沿った何か? – 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. 
    } 
関連する問題