Angular6 RxJs MergeMap调用响应

时间:2018-06-22 12:05:38

标签: angular rxjs httpclient angular6

我基本上是在做一个服务调用(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) {
   //
}

1 个答案:

答案 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;
});