2017-08-11 11 views
0

Ionic 3(angular4)で開発中に問題が発生しました。私は単にIonicの以前書いた角型アプリをやり直しているが、 "localStorage"の代わりにIonicの "storage"を使うことに決めて以来、問題は始まった。angular4(Ionic 3)の約束からの値を返します

この問題は、ローカル記憶域に小さな違いがあるために発生します。「取得」メソッドは単に値を返しますが、Ionicの記憶域「取得」メソッドは約束を返します。

今、ストレージから特定の値を読み取り、それを返す関数を用意する必要があります。何らかの理由で、この値を使用したいと約束することはできません。

getメソッドでlocalStorageと同様の動作をする方法はありますか?

getAccessToken() 
    { 
    return this._storage.get('bdAccessToken'); 
    } 

getAuthorizationOptions(){ 
       let token = this._authService.getAccessToken(); 
       let header = new Headers({ 
        'Authorization': 'Bearer '+ token 
       }); 
       let ro = new RequestOptions({ 
        headers: header 
       }); 
       let options = new RequestOptions(); 
       if (options.headers) options.headers.delete("Authorization"); 
       options.headers = header; 
       return options; 
} 



get(url:string, options?:RequestOptions):Observable<Response> 
    {  

     return super.get(url, this.getAuthorizedOptions()) 
      .catch(err => { 
       console.log("shit 1"); 
       console.log(err); 
       if (err && err.status === 401){ 
        console.log("401 here..."); 
        return this._authService.refreshToken() 
         .flatMap(r => 
          super.get(url, this.getAuthorizedOptions()) 
         ) 
         .catch(err2 => { 
          this.redirect(); 
          return Observable.throw(err2); 
         }); 
       } 
       else { 
        return Observable.throw(err); 
       } 
      }); 
} 

答えて

1

非同期インターフェイスを同期して使用することはできません。それは基本的なことです。非同期にも動作させるには、そのインタフェースを使用してコードの一部を書き直す必要があります。

あなたはasync/awaitへのアクセス権を持っている場合はそれを行うための最も簡単な方法は、それを使用してコードにも変更が必要になる可能性があるのでgetStuffが、今は非同期で、もちろん

// OLD 
function getStuff() { 
    const stuff = get('stuff'); 
    return stuff + 1; 
} 

// NEW 
async function getStuff() { 
    const stuff = await getAsync('stuff'); 
    return stuff + 1; 
} 

ようです。

何らかの理由で私はこの値を使用したいと約束することはできません。

私はこれらの理由を想像することはできません。フォーム

は常に

const valueP = getPromiseForValue(); 
valueP.then(value => doSomethingWithValue(value)); 
+0

のように書き換えることができ

const value = getValue(); doSomethingWithValue(value); 
の任意のコードのおかげで、私は私のコードの一部を含むように私の質問を更新しました。あなたがお互いに依存しているこの方法の連鎖が、あなたの提案に基づいてどのように変更できるか、何か巧みに考えてみてください。 –

+0

こんにちは@土蔵さん、お手伝いできますか?私はここで別に私の質問を策定した:https://stackoverflow.com/questions/45655939/ionic-storage-get-returns-null-only-on-the-second-call-within-method –

関連する問題