在不等待回复的情况下获取过去的请求(Angular 2 +)

时间:2017-06-21 21:50:39

标签: json angular asynchronous get

我正在通过Get请求查找API中的数据,我需要我的OnInit中的数据用于编写其他数据。问题是该方法被调用,但它作为异步方法(没有等待),它传递到任何地方,但是当获得返回时,主方法的执行已经完成,没有结果。我尝试了异步方法的实现,但它没有解决。

服务

getObjects(): MyClass[] {
let objects = new Array<MyClass>();

this.obterTodos<MyClass>(this.uriApi)
    .map(res => res.map(x => new MyClass(x.Description, x.Id)))
    .subscribe(entities => {
         objects = entities;
    });

    return objects ;
}

获取请求

public getObjects<TEntity>(url: string): Observable<TEntity[]> {
    return this.httpService
      .get(this.serviceUrl + url, this.options)
      .map(res => res.json())
      .catch(this.handleError);
}

组件:

ngOnInit() {
    this.myObjects= this.setorService.obterSetores();
    console.log('this.myObjects is empty here');
}

1 个答案:

答案 0 :(得分:1)

因此您需要订阅组件中的observable。这通常是这样做的,因此组件可以确定何时应该运行http请求&amp;所以组件可以等待http请求完成(并遵循一些逻辑)。

// subscribe to observable somewhere in your component (like ngOnInit)
this.setorService.obterSetores().subscribe(
    res => {
        this.myObjects = res;
    },
    err => {}
)

现在组件知道http请求何时完成