【发布时间】:2020-05-28 20:22:11
【问题描述】:
我正在使用 Ionic 4 和 Angular 8 开发移动应用程序。 而且我有一些麻烦,试图完成简单的任务。
所以,我正在使用: @ionic-native/native-storage & @angular/http 在 Angular 服务中是这样的:
async getToken() {
await this.storage.getItem('token')
.then((res) => {
this.token = res
})
}
这是一个 Promise 解析函数,对吗?
然后,我需要在另一个函数中调用这个 async/await 函数:
latest() {
this.getToken()
let options = {
headers: new HttpHeaders({
'Auth-Key': this.token
})
}
return this.http.get(this.env.API_URL + 'url', options)
}
下一步是从页面调用服务函数:
getLatestVideo() {
this.videoService.latest()
.subscribe(data => {
this.latestVideo = data;
})
}
现在的问题是:
当我尝试获取此令牌时,从存储中获取“令牌”的功能未完成,并且 Promise 未解决。
所以,当我调用 HttpClient 并尝试从 api 获取一些数据时,我收到一个错误,上面写着:'token,你试图调用的是 null'。
有人能解释一下 Promises 是如何工作的吗?看不懂
更新 1:
问题通过 2 个步骤解决: 第1步: 使 latest() 异步
async latest() {
await this.getToken()
let options = {
headers: new HttpHeaders({
'Auth-Key': this.token
})
}
return this.http.get(this.env.API_URL + 'url', options)
}
第 2 步: 使 getLatestVideo() 也异步
async getLatestVideo() {
const latestVideo = await this.videoService.latest();
latestVideo.subscribe(data => {
this.latestVideo = data;
})
}
新问题:如何在视图内部解决所有承诺后显示数据:
<div *ngFor="let video of latestVideo">{{ video.id }}</div>
【问题讨论】:
-
只要使用“await this.getToken()”,它就会等待promise完成。
-
@AlexanderElert 我在 getLatestVideo() 中遇到错误,说 .subscribe 在 Promise 类型上不存在,当我使用时等待 this.getToken()
标签: javascript angular promise