我有一个从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
}
答案 0 :(得分:1)
只需创建另一个名为StoreIdsService的服务。更新您从StoreIdsService中的第一个api调用“ getIds”获得的响应。这个想法是让StoreIdsService作为单例服务来保持storeIds的状态。您可以在想要获取storeIds的任何组件中注入StoreIdsService。
它是组件之间以一定角度共享数据的众多方式之一。
请参考有人发布的答案。
答案 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();
});
}