对打字稿范围感到困惑

时间:2018-12-12 19:18:18

标签: angular typescript

我正在尝试从API调用中获取对象数组,并将其保存到组件变量中。但是,在分配功能时,该值保持局部。例如:

export class ItemsComponent implements OnInit {
  items: Item[];

  constructor(private ProductInformation: ProductInformationService) { }

  ngOnInit() {
    this.getProducts();
    console.log(this.items);   //undefined
    this.items = MOCK_ITEMS;
    console.log(this.items);   //correct 3 items
  }

  getProducts() {
    this.ProductInformation.getAllProducts(
      (response) => {
         this.items = response
         console.log(this.items);   //correct 3 items
      }
    );
  }
}

为什么在调用items之后getProducts()未定义?为什么只将其保存在本地,我如何使它工作?

1 个答案:

答案 0 :(得分:1)

scope 无关。如果您查看您的 getProducts 方法,则它是异步调用。一段时间后,您会得到答复。因此,当您立即放入console.log(this.items);它变得不确定。

console.log() 放入订阅中时,您一直在等待得到响应。因此您会看到在那里定义的项目。模拟项目也是如此,因为在那里有项目,您可以在控制台中看到这些元素。