Подписаться на объемный объект в угловой
Я мучился с получением объекта через запрос get.
У меня есть следующая функция в component.ts
private _getPolygonById(id: number) {
let poly: any;
this.dataService.getCollectionbyId(id).subscribe(data => {
const res = data.json();
poly = JSON.parse(res.string);
});
return poly;
}
my service.ts содержит следующее:
getCollectionbyId(id: number) {
console.log("launching request");
return this.http.get('api/project-collections/'+id);
}
Проблема в том, что поли не определен и возвращен, поэтому ответ обрабатывается асинхронно. как я могу ждать запроса, пока он не получит ответ, а затем повлиять на него, чтобы вернуть его?
1 ответ
Как вы знаете, _getPolygonById
Функция возвращается до того, как вы получите изменение, чтобы получить результат в блоке подписки. Порядок действий следующий:
private _getPolygonById(id: number) {
let poly: any; // 1
this.dataService.getCollectionbyId(id).subscribe(data => {
// 3
const res = data.json();
poly = JSON.parse(res.string);
});
return poly; // 2
}
Вы должны вернуть наблюдаемое из _getPolygonbyId
Функция и подписаться на результат, когда вы хотите использовать его.
ngOnInit() {
this._getPolygonById(5).subscribe(// do something with the returned polygon)
}
private _getPolygonById(id: number): Observable<any> {
return this.dataService.getCollectionbyId(id);
}