javascript - Rxjs 合并()不工作

标签 javascript node.js rxjs reactivex

上下文:为了使用 JSON 树生成 Swift 代码,我以预序格式遍历树,深入到所有叶 Node ,有效地将树展平为数组。

描述: 使用 Rx.Observable.generate() 从数组元素创建可观察流,但在过滤时我得到了一些奇怪的结果。我在下面提供了一个简化的示例:

示例:

var Rx = require('/usr/local/lib/node_modules/rx') // 4.0.7

// source 1,3,5,7,9 (WAT)
var source = Rx.Observable.generate(
    0,
    function (x) { return x < 10; },
    function (x) { return x + 1; },
    function (x) { return x; }
)

// filter & merge
var a = source.filter(x => x % 2 == 0)
var b = source.filter(x => x % 2 != 0)
var source = a.merge(b)

// subscribe & output
var subscription = source.subscribe(
    x => console.log(x)
)

问题:为什么我得到的输出结果是 1,3,5,7,9 而不是 0,1,2,3,4,5,6,7,8,9预期?

我应用合并的方式似乎并不重要……我在反转时也得到输出 0,2,4,6,8。

编辑、npm 安装和 Node 版本 user3743222:感谢您的反馈,项目信息如下:

$ npm install

chai@3.4.1 node_modules/chai
├── assertion-error@1.0.1
├── type-detect@1.0.0
└── deep-eql@0.1.3 (type-detect@0.1.1)

moment@2.11.1 node_modules/moment

mocha@2.3.4 node_modules/mocha
├── escape-string-regexp@1.0.2
├── diff@1.4.0
├── commander@2.3.0
├── supports-color@1.2.0
├── growl@1.8.1
├── debug@2.2.0 (ms@0.7.1)
├── jade@0.26.3 (commander@0.6.1, mkdirp@0.3.0)
├── mkdirp@0.5.0 (minimist@0.0.8)
└── glob@3.2.3 (inherits@2.0.1, graceful-fs@2.0.3, minimatch@0.2.14)

rx@4.0.7 node_modules/rx


$ node --version

v4.2.1

最佳答案

我认为你的问题是 generate 是为了创建一个有状态的 Observable,它将为第一个订阅者提供你生成的项目,但下一个订阅者不会得到任何东西。 See this JSBin

例如,如果您使用使用 range 创建的普通 Observable,您将获得您正在寻找的合并结果。 See this JSBin

关于javascript - Rxjs 合并()不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34872901/

相关文章:

javascript - RxJS v5 : How to make a POST request with params?

typescript - 获取 Angular 服务中 Subject.asObservable() 的当前值

rxjs - 每个可观察值仅调用一次 RxJS 平面 map 函数

javascript - 在服务器端使用CAPICOM

node.js - 如何使用 node.js 创建现有 pdf 文件的自定义版本?

javascript - React.js - 导航路线时控制台中出现错误

node.js - LocalStorage 作为请求

javascript - 用于非异步的 Node JS

javascript - 谷歌可视化表中的复选框

javascript - 如何在 javascript 文件中使用 ASP.NET Resource(.resx) 字符串