Reactjs Observable.merge在史诗中表现不同

Reactjs Observable.merge在史诗中表现不同,reactjs,redux,rxjs,redux-observable,Reactjs,Redux,Rxjs,Redux Observable,在React/Redux应用程序中,我使用Redux Observable,我希望epic输出两个不同的操作 首先,我试过: const epic1 = action$ => action$ .ofType("A") .mapTo({ type: "B" }) .merge(Observable.of({ type: "C" })); 由于它不起作用,我不得不切换到: const epic2 = action$ => action$ .ofT

在React/Redux应用程序中,我使用Redux Observable,我希望epic输出两个不同的操作

首先,我试过:

const epic1 = action$ =>
  action$
    .ofType("A")
    .mapTo({ type: "B" })
    .merge(Observable.of({ type: "C" }));
由于它不起作用,我不得不切换到:

const epic2 = action$ =>
  action$
    .ofType("D")
    .mergeMap(value =>
      Observable.merge(
        Observable.of({ type: "E" }),
        Observable.of({ type: "F" })
      )
    );
看看这个代码沙盒

问题是,我不太明白为什么第一次尝试不起作用,因为在下面的例子中,它在史诗之外运行良好:

var observable = Observable.of({type: "A"})
  .mapTo({type: "B"})
  .merge(Observable.of({ type: "C" }));

observable.subscribe(value => {
  this.setState(prevState => ({
    values: [...prevState.values, value]
  }));
});

你知道为什么它在epic中表现不同吗?

这不是因为你在使用epics。第一个示例使用
.merge(Observable.of({type:“C”}))
,因此它立即订阅({type:“C”})的
Observable.of
您订阅的
epic1
。但是,您使用的是redux,因此订阅发生在redux内部的某个地方,
Observable.of({type:“C”})
会立即发出,您甚至不知道它是何时发生的。然后,类型(“A”)的任何其他操作
.ofType(“A”)
都不会进行更改,因为
.merge(Observable.of({type:“C”}))
已经发出了它的唯一值

这也解释了为什么您在问题末尾提到的示例能够如预期的那样工作

另一方面,当您使用
mergeMap
时,将对源观测到的每个发射调用回调(在类型为(“D”)action的每个
action$)。它创建新的
E
F
操作,这些操作立即合并到链中