2016-05-17 96 views
0

我有一個非常簡單的Typescript腳本(ionic2和angular2),它在HTTP調用之前添加一個身份驗證標頭。這裏是思想(簡化代碼):角2 - 異步問題

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); 
} 

在我的請求頭,我有「測試」 =「測試」,但我沒有「授權」 =「即爲MyToken」。

如何才能讓「等待」在Storage.retrieve('Auth')中設置標題?

我知道我可以使用setTimeout(),但我不喜歡這種骯髒的解決方法。

解決方案可能是可觀察/承諾,但我並不真正掌握這些東西。

任何幫助將是非常讚賞:)

傑弗裏

回答

1

這是因爲你的CreateAuthorization方法是異步的。我會嘗試類似的承諾鏈接Authorization頭被實際添加時通知:

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

謝謝,這個工程。但是,如果createAuthorization()是一個前提,是不是使用resolve(x)而不是return? –

+0

不客氣!事實上,您可以利用承諾鏈接。如果你在'then'中返回一個原始值(這裏是第一個),它將被自動包裝到已解決的承諾中。其實這是一個捷徑;-) –