【发布时间】:2016-04-20 12:49:47
【问题描述】:
根据https://github.com/Reactive-Extensions/RxJS/blob/master/doc/api/core/operators/manyselect.md,extent/manySelect方法是一个comonadic转换器,其形式为Observable a -> (Observable a -> b) -> Observable b,是selectMany/flatMat的“反转”版本。
文档中给出的示例:
var source = Rx.Observable.range(0, 3)
.manySelect(function (ys) { return ys.first(); })
.mergeAll();
var subscription = source.subscribe(
function (x) {
console.log('Next: ' + x);
},
function (err) {
console.log('Error: ' + err);
},
function () {
console.log('Completed');
});
// => Next: 0
// => Next: 1
// => Next: 2
// => Completed
我的理解是manySelect将每个观察值包装成Observable(通过Rx.Observable.just(x)之类的东西),然后将其放入选择器函数中,最后将所有返回值合并成一个新的Observable。
但是,如果我将ys.first() 更改为ys.count() 或ys.last(),程序会崩溃并显示Error: TypeError: innerSource.subscribe is not a function。
发生了什么事? manySelect 到底是做什么的,我们应该在什么时候使用它?
感谢@user3743222,我找到了flatMap行为的答案:
请注意,FlatMap 会合并这些 Observable 的发射,以便它们可以交错。
【问题讨论】:
标签: rxjs