对于这种方法,如果不将snapshotChanges()转换为promise,有什么解决方法吗



我想返回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()

相关内容

  • 没有找到相关文章

最新更新