Observable.merge在史诗中的行为有所不同

洛朗·德坎特

在React / Redux应用程序中,我使用Redux Observable,并且我希望史诗输出两个不同的动作。

首先,我尝试了这个:

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" })
      )
    );

请参见此CodeSandbox示例

问题是,我不确定为什么第一次尝试不起作用,因为在下面的示例中,它在史诗级之外效果很好:

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

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

知道为什么它在史诗中表现不同吗?

马丁

这不是因为您正在使用史诗。第一个示例使用.merge(Observable.of({ type: "C" }))它来Observable.of({ type: "C" })立即订阅您所订阅的内容epic1但是,您使用的是redux,因此订阅发生在redux内部的某个地方,并且Observable.of({ type: "C" })会立即发出,甚至不知道它何时发生。然后,任何其他动作.ofType("A")都不会改变,因为.merge(Observable.of({ type: "C" }))已经发出了唯一的值。

这也解释了为什么您在问题末尾提到的示例能够按预期运行。

另一方面,使用mergeMap回调时,可观察到的源中的每个发射都会调用回调(每个action$.ofType("D")动作)。它创造了新的EF被立即合并到链行动。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

Redux-Observable 单个史诗中的多个动作

redux-observable-在单个史诗中调度多个redux动作

使用 redux-observable 和 rxjs 在史诗中出错

为什么hide()的行为有所不同?

List.remove()对负值的行为有所不同

对于MSIE 10上的行为有所不同

Intent.ACTION_PICK的行为有所不同

为什么numpy导入的行为有所不同?

TraitCollectionDidChange对于iPhone X的行为有所不同

为什么to_sym的行为有所不同?

GNU coreutils`sort`的行为有所不同

sed命令的行为有所不同

为什么groupby操作的行为有所不同

从Vim执行的Shell命令的行为有所不同

键盘在bash下的行为有所不同

Powershell脚本在TeamCity中的行为有所不同

如何使用redux-observable在一部史诗中发出多个动作?

Redux Observable Fetching史诗中将超时运算符放在何处

如何在 redux observable 史诗中为 ajax 响应发出两个动作

语言与预期的有所不同

尽管代码,版本和配置相同,但JShint在不同的机器上的行为有所不同

Bootstrap Navbar在不同的浏览器中的行为有所不同

以不同方式执行脚本时,import 的行为会有所不同吗?

fread()在不同的字节序计算机上的行为是否有所不同?

当显示没有打印功能的数据时,IPython和REPL的行为有所不同

锚定为具有Accesskey的按钮与实际按钮的行为有所不同

与PC相比,jQuery在移动设备上的行为有所不同,具有相同的代码

具有外部联接的查询在Oracle 12c中的行为有所不同

cURL vs RestSharp vs Rest.net与Tumblr的行为有所不同