在http获取Angular请求后处理数据

时间:2019-03-08 04:39:28

标签: ajax angular http get

我有一个从get方法请求数据的服务,我想将响应映射到存储一些ID的对象,并使用这些ID发出其他http请求。 有人告诉我这通常不是通过回调方式完成的,我看了一下How do I return the response from an asynchronous call?,但我认为这不是实现服务的常用方式,任何提示都非常感谢。

尝试按角度添加onInit / constructor方法以确保在调用其他方法之前没有成功填充对象。

@Injectable ()
export class ContactService  {
   storeIds;

   getIds(callback: Function) {
   this.http.get<any>(IdsUrl, Config.options).subscribe(res => {
       callback(response);
   });

   getIds(res => {
        this.storeIds = {
          profileId: res.profile,
          refIds: res.refIds
        }
     }
   )

   // this.storeIds returns undefined as it's an async call
   this.http.post<any>(WebserviceUrl + this.storeIds.profileId , data, headers )

   // .....Many other web services that relay on this Ids
}

2 个答案:

答案 0 :(得分:1)

只需创建另一个名为StoreIdsService的服务。更新您从StoreIdsService中的第一个api调用“ getIds”获得的响应。这个想法是让StoreIdsService作为单例服务来保持storeIds的状态。您可以在想要获取storeIds的任何组件中注入StoreIdsService。

它是组件之间以一定角度共享数据的众多方式之一。

请参考有人发布的答案。

How do I share data between components in Angular 2?

答案 1 :(得分:0)

您可以简单地将服务response分配给storeIds方法内的subscribe属性。并在需要时调用其中的后续服务。

@Injectable ()
export class ContactService  {
   storeIds;

   getIds() {
   this.http.get<any>(IdsUrl, Config.options).subscribe(res => {
       this.storeIds = {
          profileId: response.profile,
          refIds: response.refIds
        }

      this.otherapicall1();
      this.otherapicall2();
   });

}