Javascript 在不将snapshotChanges()转换为promise的情况下,此方法有任何变通方法吗?

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

我想返回CartiFire,但它返回未定义,因为snapshot方法是返回可观察的
那么,在不将快照方法转换为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()