我有这个代码:
let $obs = Rx.Observable.merge(
this.obsEnqueue,
Rx.Observable.timer(2000)
);
但这并不是我想要的 – 我想要做的就是等到两个事件都触发(来自this.obsEnqueue的事件和来自Rx.Observable.timer()的事件).
merge很可能会创建一个新的Observable,它将在传入所有可观察对象的第一个事件时触发.我想创建一个新的observable,它将在所有可观察的传入被触发后触发.
更普遍的是:
let $obs = Rx.Observable.X(
Rx.Observable, // wait
Rx.Observable, // until
Rx.Observable, // all of these
...
Rx.Observable // fire the next event
);
我怎样才能做到这一点?什么是X?
解决方法:
如果要在到达时合并所有结果,可以使用zip:
const { Observable } = Rx;
const result = Observable.zip(
Observable.of('data1'),
Observable.of(true).delay(500),
Observable.timer(1000)
);
result.forEach(console.log); // after 1000ms: ['data1', true, 0]
<script src="https://cdnjs.cloudflare.com/ajax/libs/rxjs/5.0.1/Rx.min.js"></script>