Lio*_*MLA 2 async-await angularfire2 angular2-observables angular
我刚刚在使用 AngularFire2 Observables 时遇到了一个奇怪的问题,请查看此代码并告诉我您是否对正在发生的事情有所了解:
async save(){
const client = await this.getClient(this.id);
console.log(client); // ZoneAwarePromise blah blah
}
getClient(clientId) {
return this.db.object('clients/' + clientId)
.valueChanges()
.toPromise()
.then((client: any) => {key: clientId, name: client.name});
}
Run Code Online (Sandbox Code Playgroud)
所以这段代码不起作用,但如果我像下一个代码一样这样做,它将起作用:
async save(){
const client = await this.getClient(this.id);
console.log(client); // {key: 'blah', name: 'fooblah'}
}
getClient(clientId) {
return new Promise((resolve, reject) => {
this.db.object('clients/' + clientId)
.valueChanges()
.subscribe((client: any) => resolve({key: clientId, name: client.name}));
}
Run Code Online (Sandbox Code Playgroud)
那么如何在 .toPromise() 方法不起作用的情况下创建承诺并解析 Observable 数据有效呢?
这是正常行为吗?难道我做错了什么 ?让我知道 :-)
它不起作用的原因是因为您的承诺从未得到解决。
为了解决您的承诺,您的observable需要complete.
因此,如果您只是在 toPromise() 前面加上take(1),您将获得所需的效果:
return this.db.object('clients/' + clientId)
.valueChanges()
.take(1)
.toPromise();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1364 次 |
| 最近记录: |