angular - 在 Ionic 4 中处理异步和存储以进行 api 调用
问题描述
在我的应用程序中,我正在使用 Ionic Storage 保存一个用于连接 api 的令牌,问题是我不知道这是处理异步的正确形式,因为我没有在正确的时间获得令牌来制作调用 api。
播放器.page.ts
ngOnInit() {
this.playerService.getPlayers().subscribe(data => {
this.players = data;
});
}
全球服务.ts
getToken(){
this.storage.get(this.token_key).then((val) => {
this.token = val;
})
return this.token;
}
播放器.service.ts
getPlayers() {
return this.api.get('GetPlayers');
}
api.service.ts
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() 中,当 promise 被解决时,您将在其中为 this.token 赋值,但您应该返回这样的 promise -
getToken() {
return this.storage.get(this.token_key);
}
然后在来电者中 -
getToken().then((value) => {
//do assignment here
}
你目前的做法,即使在 promise 被解决之前,也总是会从函数中返回值。
编辑:根据您的评论。你想在 promise 解决后返回一个值。由于您不能从 promise 内部执行此操作,您可以做的是使函数异步并使用 await 进行分配。然后返回你的对象,比如 -
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);
});
因为异步函数总是返回一个 promise 。你也可以做承诺链,但我认为这种方法更干净
推荐阅读
- keras - 使用 Keras Conv3D 为 3D 数据实现和调整简单的 CNN
- java - 为什么卡片布局的 show 方法在这种情况下不起作用?
- amazon-web-services - 调整大小后,Lambda 将图像从一个存储桶复制到另一个存储桶
- java - 使用蓝牙获取两个安卓设备之间的距离
- google-cloud-platform - 在 Google Cloud 上的虚拟机上进行云游戏
- javascript - TypeError:无法读取反应中未定义的属性“子字符串”
- powershell - 无法验证参数“SourceMailbox”上的参数
- azure-functions - 分区键为 Partition.None 时 Azure Functions 的 Azure Cosmos DB 输入绑定
- javascript - 导出数据表中的下拉选定值
- c++ - C++ - 如何从上到下制作 4x4 矩阵和 cout 列(需要解密字符串)