我一直坚持切换可观察对象。这是一个条件:第一个 observable 应该始终发出并将作为主要值(value)流处理,第二个 observable 应该产生 void
值,然后它将作为副作用处理。
我对不同的组合运算符感到很困惑。现在我留在 concatMap 上,但它也无法正常工作。
window.onload = function() {
const { Observable } = Rx;
const one = document.getElementById('one');
const two = document.getElementById('two');
const one$ = Observable
.fromEvent(one, 'click')
.map(() => [1,2,3,4]);
const two$ = Observable
.fromEvent(two, 'click')
.map(() => void 0);
const sideEffect = values => console.log('Doing something with data', values);
one$
.concatMap(initialValues => two$
.do(() => sideEffect(initialValues))
.map(() => initialValues))
.subscribe(x => alert(JSON.stringify(x, null, 2)))
}
<script src="https://unpkg.com/@reactivex/rxjs@5.0.3/dist/global/Rx.js"></script>
<button id="one">One</button>
<button id="two">Two</button>
最佳答案
如果 $two
需要修改 $one
的最后一个值,然后发出修改后的值,您可以创建一个行为主体。
const values$ = new BehaviorSubject();
const one$ = Observable
.fromEvent(one, 'click')
.map(() => [1,2,3,4]);
const two$ = Observable
.fromEvent(two, 'click')
.map(() => void 0);
const sideEffect = values => console.log('Doing something with data', values);
one$.subscribe(values => {
values$.next(values);
});
two$.subscribe(() => {
let currentValue = values$.value;
let modifiedValue = sideEffect(currentValue);
values$.next(modifiedValue);
});
values$.subscribe(x => alert(JSON.stringify(x, null, 2)))
关于javascript - 结合两个平行的可观察量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46059073/