Javascript 数组在订阅范围外变得未定义

Javascript 数组在订阅范围外变得未定义,javascript,angular,Javascript,Angular,因此,在我的angular项目中,我创建了一个包含http get请求的方法的服务,如下所示: getAllProducts(){ return this.http.get<IProduct[]>(this.baseUrl + 'products/all');} 我的问题是:如何将httpget结果复制到组件的变量中,而不使其超出可观察的范围?由于http调用返回可观察的结果,并且将同步和异步编程混合在一起,因此无法定义。所以这里发生的是: onInit调用update() 您

因此,在我的angular项目中,我创建了一个包含http get请求的方法的服务,如下所示:

  getAllProducts(){
return this.http.get<IProduct[]>(this.baseUrl + 'products/all');}

我的问题是:如何将httpget结果复制到组件的变量中,而不使其超出可观察的范围?

由于http调用返回可观察的结果,并且将同步和异步编程混合在一起,因此无法定义。所以这里发生的是:

  • onInit调用
    update()
  • 您可以订阅
    getAllProducts()
  • http调用尚未完成
  • console.log()
    打印未定义的数组,因为订阅尚未执行
  • 订阅触发器,因为http调用返回
  • 已分配所有产品

  • 您要做的是从订阅中执行您的逻辑,如果您必须在html中使用它,那么您可以在必要时使用ngIf。

    您的目标已经完成,只是您无法控制台。请在最后一行中尝试执行的位置记录它
    ngOnInit(): void {
       
        this.update();
      }
      update(): void{
        this.adminService.getAllProducts().subscribe(response =>
          {
           this.allProducts = {...response};
           console.log(this.allProducts); //Returns a filled array
          }, error => {
            console.log(error);
          });
        console.log(this.allProducts); //Returns undefined
      }