RxJs 可观察的 zip 可观察数组

RxJs Observable Zip Array of Observables

本文关键字:观察 数组 zip RxJs      更新时间:2023-09-26

有一个使用 zip 组合固定数量的可观察量的示例,如下所示:

var range = Rx.Observable.range(0, 5);
var source = Observable.zip(
      range,
      range.skip(1),
      range.skip(2),
      function (s1, s2, s3) {
            return s1 + ':' + s2 + ':' + s3;
      }
)

我的问题是,如果我有一个可观察量数组(长度可以是任何东西),如何像zip一样完成相同的工作?

var arr = [observable1, observable2, ..]; //like 100 of them!
var source = Observable.zip(
      //how to put each observable here?
      function (__how to put argument here?_) {
            return /* loop through arguments*/;
      }
)

理论上,您可以使用 .apply()arguments 变量的组合来实现此目的。完全披露:我没有尝试过这段代码。

var arr = [observable1, observable2, ..]; //like 100 of them!
var source = Observable.zip.apply(Observable, 
     arr.concat(function (varargs) { // using "varargs" purely for documentation
         Array.prototype.forEach.apply(arguments, function (observableValue) { 
            /* do something with observableValue */;
         });
     })
);

自从 ES6 问世以来,你可以简单地将数组作为函数的参数传递,如下所示:

const arr = [ observable1, observable2, ...]
const source = Observable.zip(...arr)

为我工作:D