使用 RxJS forkJoin 时传递参数的最佳方式
Best way to pass parameter while using RxJS forkJoin
所以,我有一个服务需要执行三个函数。
我使用forkJoin
是因为我想在收到所有回复后采取进一步行动!
其中一个需要接收一个参数。
getDevices(id: string): Observable<IEquipmentRow[]> {
const url = `${apiUrl}/${id}`;
return this.http.get<IGetDevicesResponse>(url)
.pipe(
map(res => {
return res.data;
})
);
}
private regions$ = this.getRegions();
private devices$ = this.getDevices();
public equipmentPreparationData$ = forkJoin({
regions: this.regions$,
devices: this.devices$
});
实现它的最佳方法是什么?也许使用 RxJS
Subject
/BehaviorSubject
?
RxJS
switchMap
呢,我们这里可以用吗?
我是 RxJS
的新手,所以要温柔点:)
试试:
// Change your response type
public equipmentPreparationData$(deviceID: string): Observable<any> {
return forkJoin({
regions: this.regions$,
devices: this.getDevices(deviceID)
});
private getDevices(id: string): Observable<IEquipmentRow[]> {
const url = `${apiUrl}/${id}`;
return this.http.get<IGetDevicesResponse>(url)
.pipe(
map(res => {
return res.data;
})
);
}
private regions$ = this.getRegions();
这样就可以使用带参数的函数,通过getDevices
方法
此外,可能 solution
使用 combineLatest
和 mergeMap
传递 id 参数:
public woidSubject: BehaviorSubject<string> = new BehaviorSubject<string>("");
public woidObservable: Observable<string> = this.woidSubject.asObservable();
private devices$ = this.woidObservable.pipe(
mergeMap(x => {
debugger;
return this.getDevices(x);
})
);
public equipmentPreparationData$ = combineLatest([
this.regions$,
this.devices$
]).pipe(
map(([regions, resourceTypes, devices]) => {
return { regions: regions, devices: devices }
})
);
您可以像这样更改组件的 id 参数:
this.service.woidSubject.next("3243");
所以,我有一个服务需要执行三个函数。
我使用forkJoin
是因为我想在收到所有回复后采取进一步行动!
其中一个需要接收一个参数。
getDevices(id: string): Observable<IEquipmentRow[]> {
const url = `${apiUrl}/${id}`;
return this.http.get<IGetDevicesResponse>(url)
.pipe(
map(res => {
return res.data;
})
);
}
private regions$ = this.getRegions();
private devices$ = this.getDevices();
public equipmentPreparationData$ = forkJoin({
regions: this.regions$,
devices: this.devices$
});
实现它的最佳方法是什么?也许使用 RxJS
Subject
/BehaviorSubject
?
RxJS
switchMap
呢,我们这里可以用吗?
我是 RxJS
的新手,所以要温柔点:)
试试:
// Change your response type
public equipmentPreparationData$(deviceID: string): Observable<any> {
return forkJoin({
regions: this.regions$,
devices: this.getDevices(deviceID)
});
private getDevices(id: string): Observable<IEquipmentRow[]> {
const url = `${apiUrl}/${id}`;
return this.http.get<IGetDevicesResponse>(url)
.pipe(
map(res => {
return res.data;
})
);
}
private regions$ = this.getRegions();
这样就可以使用带参数的函数,通过getDevices
方法
此外,可能 solution
使用 combineLatest
和 mergeMap
传递 id 参数:
public woidSubject: BehaviorSubject<string> = new BehaviorSubject<string>("");
public woidObservable: Observable<string> = this.woidSubject.asObservable();
private devices$ = this.woidObservable.pipe(
mergeMap(x => {
debugger;
return this.getDevices(x);
})
);
public equipmentPreparationData$ = combineLatest([
this.regions$,
this.devices$
]).pipe(
map(([regions, resourceTypes, devices]) => {
return { regions: regions, devices: devices }
})
);
您可以像这样更改组件的 id 参数:
this.service.woidSubject.next("3243");