2016-05-17 11 views
0

私はHTTPコールの前に認証ヘッダーを追加する非常に簡単なTypescriptスクリプト(ionic2とangular2)を持っています。私は「テスト」=「テスト」を持っているが、私は「承認」=「MyToken」を持っていない、私のリクエストヘッダに角2 - asynchroneの問題

function CreateAuthorization(){ 
    this.header.append('tests' : 'test') 

    Storage.retrieve('Auth').then(data){ 
     this.header.append('authorization' : data.token) 
    } 

} 


function customHttp(url){ 
    CreateAuthorization(); 
    Http.get(url, this.header); 
} 

:ここでの考え方(簡略化されたコード)です。

Storage.retrieve( 'Auth')でヘッダーを設定するのを「待機」する方法を教えてください。

私はsetTimeout()を使用することができますが、私はこの汚れた回避策が嫌いです。

解決策は目に見える/約束することができますが、私はそれらのことを本当に習得しません。

すべてのヘルプは非常に高く評価されるだろう:)

ジェフリー

答えて

1

あなたCreateAuthorizationメソッドが非同期であるためです。この作品

createAuthorization() { 
    this.header.append('tests' : 'test'); 

    return Storage.retrieve('Auth').then(data){ 
    this.header.append('authorization', data.token); 
    return true; 
    } 
} 

customHttp(url) { 
    this.createAuthorization().then(() => { 
    this.http.get(url, { headers: this.header }); 
    }); 
} 
+0

おかげで、:Authorizationヘッダが実際に追加されたときに私が通知されるように連鎖することレバレッジの約束のようなものをしようとするだろう。しかし、createAuthorization()が前提である場合、戻り値の代わりにresolve(x)を使用するとは思われませんか? –

+0

よろしくお願いします!実際には、有望な連鎖を活用することができます。 'then'(ここの最初のもの)に生の値を返すと、それは自動的に解決された約束に包まれます。実際それはショートカットです;-) –