Angular 在Ionic 4中处理异步和存储以进行api调用
在我的应用程序中,我保存了一个令牌,用于使用离子存储连接api,但我不知道这是处理异步的正确形式,因为我没有在正确的时间获取令牌来调用api player.page.tsAngular 在Ionic 4中处理异步和存储以进行api调用,angular,ionic-framework,Angular,Ionic Framework,在我的应用程序中,我保存了一个令牌,用于使用离子存储连接api,但我不知道这是处理异步的正确形式,因为我没有在正确的时间获取令牌来调用api player.page.ts ngOnInit() { this.playerService.getPlayers().subscribe(data => { this.players = data; }); } global.service.ts getToken(){ this.storage.get
ngOnInit() {
this.playerService.getPlayers().subscribe(data => {
this.players = data;
});
}
global.service.ts
getToken(){
this.storage.get(this.token_key).then((val) => {
this.token = val;
})
return this.token;
}
getPlayers() {
return this.api.get('GetPlayers');
}
getHeaders() {
const httpOptions = {
headers: new HttpHeaders({
'Content-Type': 'application/json',
'Authorization': 'Bearer ' + this.global.getToken()
})
};
return httpOptions;
}
get(route:any)
{
return this.http.get(this.global.urlAPI + route , this.getHeaders());
}
player.service.ts
getToken(){
this.storage.get(this.token_key).then((val) => {
this.token = val;
})
return this.token;
}
getPlayers() {
return this.api.get('GetPlayers');
}
getHeaders() {
const httpOptions = {
headers: new HttpHeaders({
'Content-Type': 'application/json',
'Authorization': 'Bearer ' + this.global.getToken()
})
};
return httpOptions;
}
get(route:any)
{
return this.http.get(this.global.urlAPI + route , this.getHeaders());
}
api.service.ts
getToken(){
this.storage.get(this.token_key).then((val) => {
this.token = val;
})
return this.token;
}
getPlayers() {
return this.api.get('GetPlayers');
}
getHeaders() {
const httpOptions = {
headers: new HttpHeaders({
'Content-Type': 'application/json',
'Authorization': 'Bearer ' + this.global.getToken()
})
};
return httpOptions;
}
get(route:any)
{
return this.http.get(this.global.urlAPI + route , this.getHeaders());
}
在global.service.ts中,在函数getToken中,当承诺被解析时,您将为this.token赋值,但您应该返回如下承诺-
getToken() {
return this.storage.get(this.token_key);
}
然后在电话里-
getToken().then((value) => {
//do assignment here
}
您当前执行此操作的方式将始终从函数返回值,即使在承诺得到解决之前也是如此
编辑:根据你的评论。您希望在承诺解决后返回一个值。由于您不能从承诺内部执行此操作,所以您可以做的是使函数异步并使用wait执行赋值。然后返回您的对象,如-
async getHeaders() {
const httpOptions = {
headers: new HttpHeaders({
'Content-Type': 'application/json',
'Authorization': 'Bearer ' + await this.global.getToken()
})
};
return httpOptions;
}
然后,在任何需要的地方调用此函数-
getHeaders().then((value) => {
console.log(value);
});
因为异步函数总是返回一个承诺。您也可以使用承诺链接,但我认为这种方法更简洁我理解您的意思,但仍然没有意识到如何将其分配到我想要返回的内容中。我现在把它放在头上:getHeaders{let token;this.global.getToken.thenvalue=>{token=value;};const-httpOptions={headers:new-HttpHeaders{'Content-Type':'application/json','Authorization':'Bearer'+token};return-httpOptions;}但不起作用,我怎样才能把那口井还回去?我想返回标题。请检查答案。我已经根据你的评论更新了谢谢@PawanSharma,这很有帮助!