我基本上是在做一个服务调用(getEmp()),与此同时我在做另外两个调用,这很好,但是听到我需要在以下代码中响应第一个调用(getEmp())。内部返回图不返回任何内容。即使我将此映射添加到末尾,它也会返回getSalary()调用的响应。 谢谢。
My component:
------------
getEmp.subscribe(res:any)=> {
// Hear i need response of that getEmp() call.
}, (error: any) => {});
Service file:
-------------
public getEmp(eid: string) {
return this.apiSvc.get('www.dld.in/employee/' + eid).pipe(
map(res => { this.localVariable = res }), // I need the response of above call
mergeMap(() => this.getEmpInfo(eid)),
mergeMap(() => this.getSalary(eid)),);
}
public getEmpInfo(eid) {
//
}
public getSalary(eid) {
//
}
答案 0 :(得分:0)
通过按原样使用mergemap,将第一次调用中的信息分配给this.localVariable,然后由mergeMap()运算符将其丢弃。
从提供的代码来看,将服务中的异步调用合并为一个可观察的对象似乎没有任何好处。相反,我建议您将每次调用中的可观察对象返回给您的组件,然后根据需要在组件中对其进行组合。另外,请注意,您需要在组件的调用中传递eid参数。这是一种实现方法:
Component:
------------
private emp$: Observable<any>;
private empInfo$: Observable<any>;
private empSalary$: Observable<any>;
emp$ = this.serviceName.getEmp(eid).subscribe();
empInfo$ = this.serviceName.getEmpInfo(eid).subscribe();
empSalary$ = this.serviceName.getSalary(eid).subscribe();
Service:
-------------
public getEmp(eid: string) {
return this.apiSvc.get('www.dld.in/employee/' + eid);
}
public getEmpInfo(eid) {
//
}
public getSalary(eid) {
//
}
这样,您也可以处理组件中的异步变量,我建议这样做。如果您希望将值分配给组件中的不可观察对象,则可以保留如上所述的服务方法,而可以在组件中执行以下操作:
private emp: any;
const subscription = this.serviceName.getEmp(eid).subscribe((res: any) => {
this.emp = res;
});