我想交替组合多个流的元素:

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/

10-13 03:13