Rxjs 当of([1,2,3])发出一个值时,of([1,2,3]).pipe(concatAll())如何发出三个值?
打印:Rxjs 当of([1,2,3])发出一个值时,of([1,2,3]).pipe(concatAll())如何发出三个值?,rxjs,rxjs6,rxjs-observables,rxjs-pipeable-operators,Rxjs,Rxjs6,Rxjs Observables,Rxjs Pipeable Operators,打印:[1,2,3] 但是: 印刷品: of([1,2,3]).pipe(concatAll()).subscribe(console.log) 为什么会发生上述情况?为什么添加concatAll()会逐个发出数组元素?这不正是concat这个词的相反意思吗 我觉得concatAll()根据输入的不同而不同 还要考虑这一点: 1 2 3 它将再次打印: from([of(1),of(2),of(3)]).pipe(concatAll()).subscribe(console.log) 所以
[1,2,3]
但是:
印刷品:
of([1,2,3]).pipe(concatAll()).subscribe(console.log)
为什么会发生上述情况?为什么添加concatAll()
会逐个发出数组元素?这不正是concat这个词的相反意思吗
我觉得concatAll()
根据输入的不同而不同
还要考虑这一点:
1
2
3
它将再次打印:
from([of(1),of(2),of(3)]).pipe(concatAll()).subscribe(console.log)
所以([1,2,3]).pipe(concatAll())=来自([of(1),of(2),of(3)]).pipe(concatAll())
但是([1,2,3])的
=来自([of(1)、of(2)、of(3)])
,因为订阅后者将打印:
1
2
3
上面等式的右侧对我来说非常清楚,但是有文件证明,
concatAll()
应该分别发出数组的所有值,就像来自的可管道?所有处理高阶可观察操作符的操作符一样,执行与RxJS的from
操作符相同的转换
即:
Observable { _isScalar: false, _subscribe: [Function] }
Observable { _isScalar: false, _subscribe: [Function] }
Observable { _isScalar: false, _subscribe: [Function] }
基本上与
mergeMap(_ => ([1,2,3]))
这在合并/切换/连接承诺和其他易受攻击性时同样有效
您在行为中看到的差异还归因于这样一个事实,即from
创建了一个新的可观察对象,而高阶可观察操作符倾向于创建一个新的可观察对象,并且围绕这些可观察对象的订阅方式定义行为
因此,concatAll
增加了额外的行为
最后,对于一个给定的例子,仅仅因为两件事情有相似的输出,并不意味着它们在幕后做相同的事情
of([1,2,3]).pipe(concatAll())
和from([of(1),of(2),of(3)]).pipe(concatAll())
描述了两组非常不同的行为,在(本例中)它们向控制台提供相同的输出
第一个发出一个数组,并通过concatAll()
将该数组转换为数字流。第二个发出三个可观测值,并且只有在前一个完成时才有concatAll()订阅每个可观测值。它们只发出一个数字就完成了
您可以通过第二个示例清楚地看到区别:
of([1,2,3])
和from([of(1),of(2),of(3)])
第一个发射和阵列,第二个发射三个可见光。这一点没有改变
mergeMap(_ => from([1,2,3]))
再次发出相同的输出
mergeMap(_ => from([1,2,3]))
concat([1,2,3]), &&
concat(of(1), of(2), of(3))