Javascript 在不将snapshotChanges()转换为promise的情况下,此方法有任何变通方法吗?
我想返回CartiFire,但它返回未定义,因为snapshot方法是返回可观察的Javascript 在不将snapshotChanges()转换为promise的情况下,此方法有任何变通方法吗?,javascript,angular,firebase,angularfire2,Javascript,Angular,Firebase,Angularfire2,我想返回CartiFire,但它返回未定义,因为snapshot方法是返回可观察的 那么,在不将快照方法转换为promise的情况下返回CartiFire有什么解决方法吗 private async getServer() { this.db.list('/shopping-carts/').snapshotChanges() .subscribe(x => this.cartIdFire = x); return cartIdFire; } 因此,我无法从g
那么,在不将快照方法转换为promise的情况下返回CartiFire有什么解决方法吗
private async getServer()
{
this.db.list('/shopping-carts/').snapshotChanges()
.subscribe(x => this.cartIdFire = x);
return cartIdFire;
}
因此,我无法从getServer()方法返回订阅服务器。因为我必须保存本地存储中的cartFireId。在这种情况下,
等待。getServer()
将不起作用,它不会等待解决,它只在承诺中起作用,而不是在可观察中,在订阅中解决
一个简单的解决方案是,在getServer()
方法中,使用toPromise()
并返回该值,将可观测值转换为Promise
private async getServer()
{
return this.db.list('/shopping-carts/').snapshotChanges().toPromise()
}
并在getOrCreateCartId()
方法中获取cartifire
this.cardIdFire = await this.getServer()
只是不要在这里订阅,只将可观察的内容返回给调用方。然后,您可以执行getServer()。subscribethis不起作用,因为在getServer()之后,我已将该id保存到localstorage中,因此如果我在那里订阅,则CartiFire具有未定义的值toPromise()可以与管道(take(1))配合使用。此处
返回此.db.list('/shopping carts/')。snapshotChanges().pipe(take(1)).toPromise()代码>正在工作。因为toPromise在可观察到的解析时被解析。
this.cardIdFire = await this.getServer()