Angular 使用角度服务返回的结果时出错(未定义)
我的Typescript类中有两个变量:Angular 使用角度服务返回的结果时出错(未定义),angular,service,Angular,Service,我的Typescript类中有两个变量: private myServiceSubscription: Subscription; myVar: myDto[] = []; 在ctor中: this.myServiceSubscription = this.deliveryPointService .getPostalAddresses() .subscribe(result => console.log(result)); 我可以在控制台日志中看到服务
private myServiceSubscription: Subscription;
myVar: myDto[] = [];
在ctor中:
this.myServiceSubscription = this.deliveryPointService
.getPostalAddresses()
.subscribe(result => console.log(result));
我可以在控制台日志中看到服务返回的预期结果(包含两项的列表)
但是,如果我使用另一个订阅:
.subscribe(result => this.myVar);
及(不包括认购):
console.log(this.myVar[0])
然后我注意到这个.myVar是未定义的
为什么console.log(result)显示正确的结果,而this.myVar不显示
这是在angular 4中。现在,您对服务方法的结果不做任何处理。必须将返回的项目分配给变量:
.subscribe(result => {
this.myVar = result;
console.log(this.myVar);
});
现在,您不会对服务方法的结果做任何事情。必须将返回的项目分配给变量:
.subscribe(result => {
this.myVar = result;
console.log(this.myVar);
});
这就是重点。我想用这个变量做点什么,但是如果我按照你说的做,然后在下一个语句中,在
this.myServiceSubscription…
之后,我想使用this.myVar,它会显示为未定义。就好像myVar只有在订阅中才有值?但是我以后需要它,你有订阅的原因是你所做的是异步的。如果您在方法返回之前尝试访问myVar
,那么您将得到unfinedi尝试在我的方法之后访问它,而不是在我的方法之前访问它并不重要。异步操作的本质是它不会阻塞执行线程,它不会等到该操作完成后再继续下一行。看看jsp是如何工作的,这就是重点。我想用这个变量做点什么,但是如果我按照你说的做,然后在下一个语句中,在this.myServiceSubscription…
之后,我想使用this.myVar,它会显示为未定义。就好像myVar只有在订阅中才有值?但是我以后需要它,你有订阅的原因是你所做的是异步的。如果您在方法返回之前尝试访问myVar
,那么您将得到unfinedi尝试在我的方法之后访问它,而不是在我的方法之前访问它并不重要。异步操作的本质是它不会阻塞执行线程,它不会等到该操作完成后再继续下一行。看看JS是如何工作的