2016-05-17 81 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'中返回一个原始值(这里是第一个),它将被自动包装到已解决的承诺中。其实这是一个捷径;-) –