javascript - 坚持试图理解 JS 中的 Promise 是如何工作的
问题描述
我正在使用 Ionic 4 和 Angular 8 开发移动应用程序。我遇到了一些麻烦,试图完成简单的任务。
所以,我 在 Angular 服务中使用: @ionic-native/native-storage & @angular/http ,如下所示:
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>
解决方案
好吧,你必须使用更多的等待。
async latest() {
await this.getToken()
let options = {
headers: new HttpHeaders({
'Auth-Key': this.token
})
}
return this.http.get(this.env.API_URL + 'url', options)
}
下一步
async getLatestVideo() {
const latestVideo = await this.videoService.latest();
latestVideo.subscribe(data => {
this.latestVideo = data;
})
}
也许这会有所帮助?
推荐阅读
- c++ - Sprite::create(“file.png”) 在 Cocos2d-x C++ Visual Studio 上返回 null
- python - QtMediaplayer 不适用于无框和半透明背景 PyQt5
- azure - Azure API 管理 - 多个 Azure 区域部署,禁用一个区域?
- python - ModuleNotFoundError:在 Azure 上部署没有名为“django”的模块
- firebase - FirebaseAuth:如何更改已链接到提供商的电话号码?
- javascript - Javascript - 将静态值传递给回调函数
- javascript - Jest:我怎样才能得到在 jest 模拟函数中调用的参数?
- javascript - 加载失败