为何Observable<Persons[]>可作为mergeAll操作符的输入?
为什么RxJS的mergeAll能处理Observable<Person[]>类型的输入?
你疑惑的点在于文档里说mergeAll是用来展平Observable-of-Observables,但实际代码里它却能处理发射数组的Observable,核心原因是RxJS的ObservableInput类型范围比你想的更广。
先看文档里的定义:mergeAll<O extends ObservableInput>(...),这里的O只要是ObservableInput的子类就行,而ObservableInput不只是Observable,它还包含:
- 数组(Array)
- Promise
- 可迭代对象(Iterable)
当你的persons$是Observable<Person[]>时,每次它发射一个Person数组,这个数组会被mergeAll当作一个ObservableInput来处理——mergeAll会自动把数组“展开”,逐个发射数组里的每个Person元素,最终就得到了Observable<Person>,和注释里写的“flatten to Observable
简单来说,mergeAll的能力不只是展平Observable嵌套,它能处理任何ObservableInput类型的源发射值,把它们都转成Observable后再合并发射内部的值,数组自然也在它的处理范围内。
内容的提问来源于stack exchange,提问作者KnowledgePath
相关产品推荐
相关产品推荐

