Angular 8:为什么 getcartorCreate() 方法的执行在执行 this.id = await this.getServer() 后中断;
Angular 8 : why execution of getcartorCreate() method break after execute the this.id = await this.getServer();
private getServer()
{
return this.db.list('/shopping-carts/').snapshotChanges().toPromise();
}
private async getOrCreateCartId() //to create a cartid or acceess the cartid
{
let cartId = localStorage.getItem('cartId'); //to create a cartid or acceess the cartid
if(cartId)
{
return cartId;
}
this.id = await this.getServer();
console.log(this.id);
console.log(this.cartIdFire);
if(this.cartIdFire)
{
return this.cartIdFire;
}
return "return something for testing";
}
在调用 getServer() 之后 angular 即使方法 getorCreated() 未完成或 console.log(this.id) 也会停止执行此服务;没有在控制台上打印任何内容,并且 return 没有任何内容完全放弃了该服务。这是什么行为?
因为toPromise()也是一个rxjx库函数,所以toPromise等到observable完全解析。但是 snapshotChanges() 不断发送数据,我们正在等待 getserver()。所以在 toPromise() 解决之前 angular 暂停 getorCreted() 方法,因为它是异步的并且其他依赖方法也没有被调用,为了避免这种情况,罗伯特先生建议这个 return this.db.list('/购物车/').snapshotChanges().pipe(take(1)).toPromise();这个工作正常,这个 pipe(take(1)) 方法从 observable 和 unsubscribe observable 中获取值然后 toPromise 将该结果包装到另一个 promise 和 returns.
private getServer()
{
return this.db.list('/shopping-carts/').snapshotChanges().toPromise();
}
private async getOrCreateCartId() //to create a cartid or acceess the cartid
{
let cartId = localStorage.getItem('cartId'); //to create a cartid or acceess the cartid
if(cartId)
{
return cartId;
}
this.id = await this.getServer();
console.log(this.id);
console.log(this.cartIdFire);
if(this.cartIdFire)
{
return this.cartIdFire;
}
return "return something for testing";
}
在调用 getServer() 之后 angular 即使方法 getorCreated() 未完成或 console.log(this.id) 也会停止执行此服务;没有在控制台上打印任何内容,并且 return 没有任何内容完全放弃了该服务。这是什么行为?
因为toPromise()也是一个rxjx库函数,所以toPromise等到observable完全解析。但是 snapshotChanges() 不断发送数据,我们正在等待 getserver()。所以在 toPromise() 解决之前 angular 暂停 getorCreted() 方法,因为它是异步的并且其他依赖方法也没有被调用,为了避免这种情况,罗伯特先生建议这个 return this.db.list('/购物车/').snapshotChanges().pipe(take(1)).toPromise();这个工作正常,这个 pipe(take(1)) 方法从 observable 和 unsubscribe observable 中获取值然后 toPromise 将该结果包装到另一个 promise 和 returns.