以角度订阅大量物体

时间:2018-04-13 08:46:02

标签: angular angular4-httpclient

我一直在通过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;
}

我的service.ts包含以下内容:

getCollectionbyId(id: number) {
    console.log("launching request");
    return this.http.get('api/project-collections/'+id);
}

问题是poly是未定义的并且如此返回,响应被异步处理。我怎么能等待请求,直到它得到响应,然后影响它到poly,返回它?

1 个答案:

答案 0 :(得分:0)

如您所知,_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函数返回observable,并在您想要使用它时订阅结果。

ngOnInit() {
  this._getPolygonById(5).subscribe(// do something with the returned polygon)
}

private _getPolygonById(id: number): Observable<any> {
    return this.dataService.getCollectionbyId(id);
}