我有一个简单的场景: 我想将从服务返回的数组存储到类变量中。在我存储数据之前,如何等待数据可用?如果我等待一段时间(用settimeout测试),它就可用。等待订阅完成
服务:
public getEventHistory(): Observable<heatmapElement[]> {
return this.tokenResolver.getToken(true).switchMap(token => {
var headers = new Headers();
headers.append('Authorization', 'Bearer ' + token);
headers.append('Content-Type', 'application/json');
return this.http.get(this.restApi, new RequestOptions({headers: headers}));
})
.map((res: Response) => res.json());
}
客户端订阅:
getEventHistory(): void {
this.eventHistoryService.getEventHistory()
.subscribe(data => this.heatmapData = data,
error => console.log('Error in Heatmap get data: ' + <any> error)
);
console.log('HeatmapData: '+ this.heatmapData.toString()); <---- Undefined and causes error
}
的数据是可用的,如果我等待一段时间......但不应该以这种方式是必要的应该是...
ngOnInit(): void {
this.getEventHistory();
setTimeout(() => {
console.log('HeatmapData: '+ this.heatmapData.toString());
},3000);
}
研究[我如何返回从angular2可观察/ HTTP /异步调用的响应?(可能的复制https://stackoverflow.com/questions/43055706/how-do-i-return-the -response-from-an-observable-http-async-call-in-angular2) – Alex
您的代码结构有缺陷。你的'getEventHistory()'方法应该返回一个可观察值(即不要在该方法内部进行订阅)。你只需要订阅什么时候需要数据,你的情况是在'ngOnInit()'中。 – AngularChef