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.