Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/416.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Rxjs 5中最组合的行为?_Javascript_Rxjs_Rxjs5_Combinelatest - Fatal编程技术网

Javascript Rxjs 5中最组合的行为?

Javascript Rxjs 5中最组合的行为?,javascript,rxjs,rxjs5,combinelatest,Javascript,Rxjs,Rxjs5,Combinelatest,查看CombineTest的 组合多个可观察对象以创建一个值为 根据每个输入观测值的最新值计算 或 每当任何可观察的输入发出一个值时,它就会计算一个公式 使用所有输入的最新值,然后发出 这个公式 很明显,在每个时间段/排放量,排放量的结果是最新排放量的组合 如果是,请查看此代码 const obs1 = Rx.Observable.of(1, 2, 3, 4, 5); const obs2 = Rx.Observable.of('a', 'b', 'c') const obs3 = obs2.c

查看CombineTest的

组合多个可观察对象以创建一个值为 根据每个输入观测值的最新值计算

每当任何可观察的输入发出一个值时,它就会计算一个公式 使用所有输入的最新值,然后发出 这个公式

很明显,在每个时间段/排放量,排放量的结果是最新排放量的组合

如果是,请查看此代码

const obs1 = Rx.Observable.of(1, 2, 3, 4, 5);
const obs2 = Rx.Observable.of('a', 'b', 'c')
const obs3 = obs2.combineLatest(obs1, (a, b) => a+b);

const subscribe = obs3.subscribe(latestValues => {
  console.log(latestValues   );
});
结果是:

c1,c2,c3,c4,c5
当我改变的时候

obs2.combineLatest(obs1..

-我得到5a,5b,5c

问题:

文档没有指定调用顺序方面的任何差异(如果有),为什么会得到不同的结果

为什么我看不到其他来源的组合?似乎一个源正在获取它的最后一个值,然后才将它与另一个源的每个值连接起来

似乎这就是实际发生的情况:

[other source]---a---b---c------------------------
[first source]-------------1----2-----3-----4----5
[result]-------------------c1---c2----c3----c4---c5
当我交换订单obs1obs2时:

这是怎么回事?为什么一个流必须完成才能开始连接

为什么我看不到这样的东西或一个变体:

[first source]-----1-----2--------3-------4------5---
[other source]---------a-----b------c----------------
[result]---------------1a------2b------3b---4c-------5c

这是因为源观测值的值是同步发射的,除非您使用调度程序。这意味着第一个obs1发射所有值,只有最后一个值被CombineTest记住,如果切换两个观察值,obs2将在相同的应用程序中发射其所有值。现在CombineTest对两个观察值都有值,因此来自第二个观察值的任何发射都将使操作符发射一个值

它之所以这样工作是因为Observable.of在内部实现为ArrayObservable,默认情况下它不使用任何调度器。这意味着它的所有排放都是同步发生的。看


顺便说一句,您可以将Rx.Scheduler.async作为最后一个参数添加到两个源观测值中。

那么rx4会发出不同的结果吗?我认为RxJS 4默认使用的是所谓的即时调度器,因此结果很可能与RxJS 5不同。
[first source]-----1--2---3--4--5----------------
[other source]---------------------a-----b------c
[result]---------------------------5a----5b-----5c
[first source]-----1-----2--------3-------4------5---
[other source]---------a-----b------c----------------
[result]---------------1a------2b------3b---4c-------5c