我根本不是 Typescript、Javascript 或前端开发人员。我继承了Angular 13项目。有一个函数返回Observable<Dto[]>
。我在代码中看到了类似的内容:
this.service.getStuff(arg).pipe(
mergeMap(x => x),
concatMap(y => { return this.service.getOtherStuff(x.subObj.id).pipe(
map(v => ({ obj1: y, obj2: v})));
})
).subscribe(
// ... do something with results
我理解它的作用以及为什么这样做,但我一生都无法理解为什么会这样做mergeMap
将数组转换为单独值的流。文档仅这么说mergeMap
:
Projects each source value to an Observable which is merged in the output Observable
我的理解是source value
在这种情况下是Dto[]
,所以投影应该是Observable<Dto[]>
,不是从数组中的单独值创建的 Observables 列表。
我怀疑maybe这个动作稍后完成,但是把tap
with console.log
around mergeMap
表明输入确实是一个数组,输出是一个流对象。
那么到底发生了什么以及为什么呢?为什么我们在使用它时文档中没有对此进行解释。
这是有意的行为。如果您查看文档,它会说project
函数需要返回ObservableInput不仅仅是Observable
。事实上,所有期望 Observable 作为参数的 RxJS 运算符都可以与任何ObservableInput
.
ObservableInput
例如,可以是 Observable(显然)、异步生成器、数组或 Promise。
所以使用mergeMap(x => x)
实际上仅用于解开数组,相当于mergeMap(x => from(x))
。也许更干净的解决方案会使用mergeAll()
旨在与高阶可观察量一起使用的运算符。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)