【发布时间】:2017-04-06 18:32:05
【问题描述】:
import { Injectable } from '@angular/core';
import { Http, Response, Headers, RequestOptions } from '@angular/http';
import { Observable } from 'rxjs/Rx';
// Import RxJs required methods
import 'rxjs/add/operator/map';
import 'rxjs/add/operator/catch'
@Injectable()
export class EquipmentService{
data: any;
constructor(private http:Http){
}
getDefaultEquipment(){
this.http.get('./app/SaveData/equipmentTest.json')
.map((res:Response) => res.json())
.subscribe(data => { this.data = data},
err => console.error(err),
() => console.log(this.data));
}
}
从文件中读取数据,重要的位是getDefaultEquipment()。
如果你看到最后一个 console.log(this.data) 数据是正确的,这正是我需要的。但如果我return this.http.get(... () => {return this.data}) 我得到未定义。如何获取并返回 this.data??
很明显,如果我写另一个返回,如下所示,observable 还没有完成,所以它会返回空数据:any。
//clearly won't work because the get hasn't returned yet
getDefaultEquipment(){
this.http.get(...data => {this.data = data}...);
return this.data;
}
【问题讨论】:
-
返回你的 observable。您不需要将异步调用转换为同步调用。
-
您无法返回数据。不要订阅。只需返回可观察的。调用者将是订阅者,并将获取传递给 subscribe() 的回调函数中的数据。
-
太棒了。那成功了。在我的设备组件
this.equipmentService.getDefaultEquipment().subscribe( stuff => {console.log(stuff)}, );中为调用者添加订阅方法@谢谢。
标签: angular rxjs angular2-observables