javascript - 结合两个平行的可观察量

标签 javascript rxjs observable rxjs5

我一直坚持切换可观察对象。这是一个条件:第一个 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/

相关文章:

angular - 使用 catchError 更新组件

图像点上的 javascript onclick 事件

javascript - 当所选下拉选项的值大于 0 时,使提交按钮处于事件状态

RxJS - 重试或重置

javascript - 同一 flatMap 方法中的多个 http 请求

java - DeferredResult 导致 Weblogic 中的异常

java - RxJava 嵌套 Zip 操作不返回

javascript - 从 JSON 对象中删除数据

javascript - 如何从 response.body 获取 Node 中 '<img src=' '>' 的绝对路径

rxjs - Subject 类的 isStopped 和 closed 属性有什么区别?