Json 无需等待响应即可通过请求(Angular 2+;)

Json 无需等待响应即可通过请求(Angular 2+;),json,angular,asynchronous,get,Json,Angular,Asynchronous,Get,我正在通过Get请求在API中查找数据,我需要在我的OnInit中使用这些数据来组合其他数据。问题是该方法正在被调用,但它是一个异步方法(无等待),它到处传递,但当获得返回时,主方法的执行已经完成,没有结果。我尝试了异步方法的实现,但没有解决问题 服务: getObjects(): MyClass[] { let objects = new Array<MyClass>(); this.obterTodos<MyClass>(this.uriApi) .map(

我正在通过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 ;
}
ngOnInit() {
    this.myObjects= this.setorService.obterSetores();
    console.log('this.myObjects is empty here');
}

因此,您需要订阅组件中的可观察对象。这通常是为了让组件能够确定何时应该运行http请求&因此组件可以等待http请求完成(并遵循一些逻辑)


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

,问题是我必须在每个组件上复制代码,以便从api获取对象列表。。。是吗?是的。您可以做的一件事是在最初调用api时存储其结果。然后,需要数据的每个后续组件都可以使用存储的数据
ngOnInit() {
    this.myObjects= this.setorService.obterSetores();
    console.log('this.myObjects is empty here');
}
// subscribe to observable somewhere in your component (like ngOnInit)
this.setorService.obterSetores().subscribe(
    res => {
        this.myObjects = res;
    },
    err => {}
)