Rxjs merge() 不起作用
Rxjs merge() not working
上下文:为了使用 JSON 树生成 swift 代码,我正在以预购格式遍历树,向下到达所有叶节点,有效地将树扁平化为数组。
描述:使用 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 安装和节点版本用户3743222:感谢您的反馈,有关项目的信息如下:
$ 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 旨在创建一个有状态的可观察对象,这将为第一个订阅者提供您生成的项目,但下一个订阅者不会得到任何东西。请参阅此 JSBin
例如,如果您使用使用 range
创建的普通可观察量,您将获得所需的合并结果。请参阅此 JSBin
如评论中所述,对于generate
运算符,RxjsV4 似乎表现出与 Rxjsv2 不同的行为。
周转:
- 降级版本
- 使用
defer
重新启动源 参见 http://jsfiddle.net/fz3LL7e5/1/在这种情况下,这将有效,但不一定在所有情况下都有效。 -
实际上我认为您想要使用
share
因为您希望下游可观察对象看到相同的值,对吗? 而不是重新启动生成。 参看 http://jsfiddle.net/fz3LL7e5/2/这按预期工作。
关于热与冷的解释在这里(官方文档)和这里(图解数据流)
我做了一些摆弄,尝试了不同的方法来创建事件流
我喜欢使用 from 类似数组的选项,其中您传递给 from() 的对象必须具有公共长度属性。不确定这是否是因为它已编入索引。
var E = Rx.Observable.from(arrayLike,
function (_, i) {
return i
})
此处显示的工作:http://jsfiddle.net/th3caaaz/
相关文章:
- electronic BrowserWindow的最小高度和宽度在hide()show()方法之后不起作用
- 监视函数从服务返回不起作用,但作用域函数起作用
- 幻灯片滚动javascript不起作用
- 简单的javascript在Shopify中不起作用
- Recaptcha在IE7和IE8中不起作用
- Ember Data DS.Model's set函数不起作用
- JsFiddle上的鼠标事件不起作用
- 我的AngularJS表达式没有'不起作用
- 点击按钮输入不起作用
- 面向对象的Javascript代码在IE7中不起作用
- 分部隐藏在jquery中不起作用
- 在phonegap应用程序内部重定向不起作用
- Array.length似乎不起作用;console.log则显示其他情况
- $ionicplatform内的$scope不;不起作用
- 我的javascript for循环不起作用
- Meteor-添加用户自定义字段的方法不起作用
- 为什么 .focus() 不起作用,而 .css(“color”,“red”) 在同一个选择器上起作用
- Textarea必需的attribut在javascript中不起作用
- 为什么这个Merge-Sort java脚本实现不起作用
- Rxjs merge() 不起作用