1

トークンをローカルストレージに保存したいのですが、存在する場合は少し調整してからページで使用します。

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

プロミスが終了したときに呼び出される別のメイン関数が必要ですか?

お気に入り:

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

ngOnInit のコンストラクターの代わりに、次のものがあります。

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

そして、mainAction() には、私がやりたいことの残りがありますか?

4

1 に答える 1

2

プロミスが終了したときに呼び出される別のメイン関数が必要ですか?

それはそれを行う1つの方法です。getToken次のように新しい Promise を返すことで、関連するすべてのロジックをメソッド内に保持することもできます。

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

その後

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

更新: @SamMason のコメントに従って回答が更新されました。

于 2016-10-06T11:13:40.157 に答える