为什么在 angular 2 中从 Observable 打印未定义的数据
why print undefined data out of Observable in angular 2
我的服务代码是:
getUserdata(id:string): Observable<any> {
return this.http.get('https://jsonplaceholder.typicode.com/todos/' + id)
.map((res: Response) => {
const data = res.json();
return data;
})
}
在我的组件中是:
ngOnInit() {
this.serveicService.getUserdata('1').subscribe(res => {
this.title = res.title;
console.log(this.title); // prints value
});
console.log(this.title); // prints undefined
}
我需要在订阅方法之外获取数据。
一切似乎都是正确的。您的方法 'getUserdata' returns 可观察,这意味着只有在时间 X 之后获得新值时您才会获得您的价值。这就是为什么您的第二个打印 returns undefined -> 'getUserdata'没有返回 Observable。
如果您想 change/work 使用返回的数据,那么您应该在返回数据时执行所有操作(在订阅中)。
如果你想在 html 中使用它,请随意在 .subscription() 块中分配它们并在 html 中使用,但时间很短(除非它 fails/lags) 你不会 see/use 他们(他们将是未定义的,因为你还在等待数据被获取)
使用方法:
ngOnInit() {
this.serveicService.getUserdata('1').subscribe(res => {
this.title = res.title;
console.log(this.title); // prints value
// here we have our data and we can start work with it
});
console.log(this.title); // prints undefined (can't work with it, because it's async, you don't have value here)
}
我的服务代码是:
getUserdata(id:string): Observable<any> {
return this.http.get('https://jsonplaceholder.typicode.com/todos/' + id)
.map((res: Response) => {
const data = res.json();
return data;
})
}
在我的组件中是:
ngOnInit() {
this.serveicService.getUserdata('1').subscribe(res => {
this.title = res.title;
console.log(this.title); // prints value
});
console.log(this.title); // prints undefined
}
我需要在订阅方法之外获取数据。
一切似乎都是正确的。您的方法 'getUserdata' returns 可观察,这意味着只有在时间 X 之后获得新值时您才会获得您的价值。这就是为什么您的第二个打印 returns undefined -> 'getUserdata'没有返回 Observable。
如果您想 change/work 使用返回的数据,那么您应该在返回数据时执行所有操作(在订阅中)。
如果你想在 html 中使用它,请随意在 .subscription() 块中分配它们并在 html 中使用,但时间很短(除非它 fails/lags) 你不会 see/use 他们(他们将是未定义的,因为你还在等待数据被获取)
使用方法:
ngOnInit() {
this.serveicService.getUserdata('1').subscribe(res => {
this.title = res.title;
console.log(this.title); // prints value
// here we have our data and we can start work with it
});
console.log(this.title); // prints undefined (can't work with it, because it's async, you don't have value here)
}