为什么在 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)
}