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请求期间变量是未定义的