我想返回cartIdFire,但它返回未定义,因为快照方法是返回可观察的
所以,有什么解决方法可以在不将快照方法转换为promise的情况下返回cartIdFire?
private async getServer()
{
this.db.list('/shopping-carts/').snapshotChanges()
.subscribe(x => this.cartIdFire = x);
return cartIdFire;
}
private async getOrCreateCartId() //to create a cartid or acceess the cartid
{
let cartId = localStorage.getItem('cartId'); //to create a cartid or acceess
if(cartId)
{
return cartId;
}
this.id = await this.getServer();
console.log(this.id);
console.log(this.cartIdFire); //it gives undefined
if(this.cartIdFire)
{
localStorage.setItem('cartId' ,result.key);
return this.cartIdFire;
}
let result = await this.create();
localStorage.setItem('cartId' ,result.key);
return result.key;
}
所以我不能从getServer((方法返回subscriber。因为我必须将
cartFireId保存在本地存储中。
在这种情况下,await this.getServer()
将不工作,它不会等待解决,它只在Promise中工作,而不是在Observable中工作,在订阅中解决
一个简单的解决方案是,在getServer()
方法中将Observable转换为Promise,使用toPromise()
并返回该值
private async getServer()
{
return this.db.list('/shopping-carts/').snapshotChanges().toPromise()
}
并在getOrCreateCartId()
方法中得到cartIdFire
this.cardIdFire = await this.getServer()