Angular 使用角度服务返回的结果时出错(未定义)

Angular 使用角度服务返回的结果时出错(未定义),angular,service,Angular,Service,我的Typescript类中有两个变量: private myServiceSubscription: Subscription; myVar: myDto[] = []; 在ctor中: this.myServiceSubscription = this.deliveryPointService .getPostalAddresses() .subscribe(result => console.log(result)); 我可以在控制台日志中看到服务

我的Typescript类中有两个变量:

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是如何工作的