Javascript 为什么这个值在其他地方被认为是未定义的?

Javascript 为什么这个值在其他地方被认为是未定义的?,javascript,angular,typescript,mean,Javascript,Angular,Typescript,Mean,我有书,有书评 books: Book[]; reviews: Review[]; 填充这些数组的信息由组件的函数拉入 retrieveBooks(): void { this.bookService.getAll() .subscribe( data => { this.books = data; }, error => { console.log(er

我有书,有书评

      books: Book[];
  reviews: Review[];
填充这些数组的信息由组件的函数拉入

  retrieveBooks(): void {
    this.bookService.getAll()
      .subscribe(
        data => {
          this.books = data;
        },
        error => {
          console.log(error);
        }
      );
  }

  retrieveReviews(): void {
    this.reviewService.getAll()
      .subscribe(
        data => {
          this.reviews = data;
        },
        error => {
          console.log(error);
        });
  }
代码可以工作,但无法识别对象数组

它说未定义

除非我在.subscribe(数据=>{})中工作

我可以输入一个console.log,然后数组按它应该的方式打印

但是如果我尝试读取这个函数之外的数组,它仍然会说未定义

我不明白为什么会出现这种情况,因为我们已经将其写入了一开始定义的组件数组中


该数据不应该在整个组件中都可以访问吗?

您只定义了类型。该属性没有指定值,因此返回
未定义的
。您应该事先初始化一个空数组

@Component(){}
export class MyComponent {
  books: Book[] = [];
  reviews: Review[] = [];

  ... more stuff
}

旁注:在分配
subscribe
中书籍和评论的值之前(这需要一些时间),该值是
undefined
(或者在我的例子中是
[]
)。

从api端点得到响应后,是否调用返回undefined的函数?在将一些值分配给它们之前,它们是未定义的。而且api调用订阅需要一些时间,因此在api请求期间变量是
未定义的