我想交替组合多个流的元素:
var print = console.log.bind(console);
var s1 = Rx.Observable.fromArray([1, 1, 5]);
var s2 = Rx.Observable.fromArray([2, 9]);
var s3 = Rx.Observable.fromArray([3, 4, 6, 7, 8]);
alternate(s1, s2, s3).subscribe(print); // 1, 2, 3, 1, 9, 4, 5, 6, 7, 8
alternate
的函数定义如何看待? 最佳答案
在处理从数组创建的可观察对象时(如您的示例),请使用zip和concatMap;在处理固有异步的可观察对象时,请使用zip和flatMap。
Rx.Observable
.zip(s1, s2, s3, function(x,y,z) { return [x,y,z]; })
.concatMap(function (list) { return Rx.Observable.from(list); })
.subscribe(print); // 1, 2, 3, 1, 9, 4
请注意,一旦源可观察项之一完成,此操作就不再进行。这是因为
zip
是严格“平衡”的,它会等待所有源都具有匹配事件。在处理完整的源代码时,您需要的是zip的某种宽松版本。关于RXJS:交替组合流元素,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28656988/