2016-10-05 13 views
1

ローカルストレージにトークンを保存したい場合は、それが少し微調整されていて、それをページ上で使用します。ionic 2とプロバイダのnative storage

イオニクス1では、ローカルストレージからデータを取得して変更して返したサービスを簡単に作成でき、メインコンポーネントはそのまま使用できます。

しかし、NativeStorage.getItem()は約束を返します。サービスを強制的にアイテムの取得を完了させ、変更したトークンをデータとして返す前に他の変更を終了するにはどうすればよいですか?

私が行うことができるようにしたい:

export class Test{ 
    let tok = ""; 
    constructor(tokenService:TokenService){ 
     this.tok = tokenService.getToken() 
    } 

    ngOnInit(){ 
     alert(this.tok + " Is your token"); 
    } 
} 

とtokenServiceでプロバイダが持っている:

getToken(){ 
// this doesn't work now because it will return undef for modified_token not waiting for the promise to finish 
    let modified_token:string; 
    NativeStorage.getItem('token').then(
     data=>{ 
      modified_token = data + 'modified'; 
     } 
    ); 
    return modified_token 
} 

は私だけの約束が終了したときに呼び出され、別の主な機能を持っている必要があります?以下のような

:ngOnInitでコンストラクタで

getToken(){ 
    return NativeStorage.getItem('token') 
} 

との代わりは持っている:

ngOnInit(){ 
tokenService.getToken().then(
    data => { 
     let modified_token = data + "modified"; 
     mainAction(modified_token); 
    }) 
} 

とmainAction()私は何をしたいの残りの部分を持っていますか?

答えて

2

約束が完了したときに呼び出される別の主な機能がありますか?

これはその方法の1つです。また、このような新しい約束を返すことによってgetTokenメソッド内のすべての関連のロジックを保つことができる:

getToken(){ 
    return NativeStorage.getItem('token').then(data => return data + 'modified') 
} 

そして

ngOnInit(){ 
tokenService.getToken().then(
    modifiedToken => { 
     mainAction(modifiedToken); 
    }) 
} 

UPDATE:答えは@SamMasonコメントに応じて更新されたを。

+1

あなたの 'getToken()'は不必要に複雑に見えます。それはなぜ 'NativeStorage.getItem( 'token')を返すだけではないのですか?(data => data + 'modified')'? 「チェーン」をうまく約束する! –

+0

@SamMasonあなたは絶対に正しいです。私はあなたの提案で答えを更新しました。どうもありがとう :) – sebaferreras

関連する問題