【发布时间】:2018-10-24 16:50:46
【问题描述】:
我正在学习使用 RXJS。在这种情况下,我使用 rxjs 链接了一些异步请求。在最后一个mergeMap 中,我想访问第一个mergeMap 的参数。我已经使用Global 或withLatest 探索了该选项,但是这两个选项似乎都不适合这里。
const arraySrc$ = from(gauges).pipe(
mergeMap(gauge => {
return readCSVFile(gauge.id);
}),
mergeMap((csvStr: any) => readStringToArray(csvStr.data)),
map((array: string[][]) => transposeArray(array)),
mergeMap((array: number[][]) => forkJoin(uploadToDB(array, gauge.id))),
catchError(error => of(`Bad Promise: ${error}`))
);
readCSVFile 是一个异步请求,它返回一个 observable 以从远程服务器读取 CSV。
readStringToArray 是另一个异步请求,它返回一个可将string 转换为Arrays 的可观察对象
transposeArray 只是进行转置
uploadToDB是异步DB请求,需要第一个mergeMap中的gague.id。
我如何得到它?就为什么我这样做的方式不好接受一些建议会很棒。
目前,我只是逐层传递ID,但感觉不正确。
const arraySrc$ = from(gauges).pipe(
mergeMap(gauge => readCSVFile(gauge.id)),
mergeMap(({ data, gaugeId }: any) => readStringToArray(data, gaugeId)),
map(({ data, gaugeId }) => transposeArray(data, gaugeId)),
mergeMap(({ data, gaugeId }) => uploadToDB(data, gaugeId)),
catchError(error => of(`Bad Promise: ${error}`))
);
【问题讨论】:
-
@picci 谢谢,但我需要先从列表中获取 ID。我想我可以将它包装到另一个管道中,但这似乎有点乏味。
标签: rxjs