Подписаться на объемный объект в угловой

Я мучился с получением объекта через запрос 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);
}
Другие вопросы по тегам