我可以用rx.js观察数组的增加吗?
fromArray Rx wiki on github我可以用rx.js观察数组的增加吗?
coffee> rext = require 'rx'
coffee> arr = [1..5]
[ 1, 2, 3, 4, 5 ]
coffee> obs = rext.Observable.fromArray(arr)
{ _subscribe: [Function] }
coffee> obs.subscribe((x) -> console.log("added value: " + x))
added value: 1
added value: 2
added value: 3
added value: 4
added value: 5
{ isStopped: true,
observer:
{ isStopped: true,
_onNext: [Function],
_onError: [Function: defaultError],
_onCompleted: [Function: noop] },
m: { isDisposed: true, current: null } }
coffee> arr.push(12) # expecting "added value: 12"
6 # instead got new length of array
coffee>
这真的看起来像subscribe
功能将只火一次,当它的创建。这似乎有点用词不当,因为我真的只是为了 - 分配数组而不是观察其上的变化。该代码几乎与维基上的内容完全相同。所以要么我做错了或subscribe
不符合我的期望。
Observable.fromArray创建一个Observable,它在您添加订阅服务器时立即触发每个数组项的事件。因此,它不会“观察”该阵列的变化。
如果您需要一个“可推式集合”,Bacon.js中的总线类可能就是您要找的。对于RxJs,我的小型MessageQueue类具有类似的功能。
在RxJS中,您要查找的内容称为Subject
。 您可以将数据推入并从中进行流式传输。
例子:
var array = [];
var arraySubject = new Rx.Subject();
var pushToArray = function (item) {
array.push(item);
arraySubject.next(item);
}
// Subscribe to the subject to react to changes
arraySubject.subscribe((item) => console.log(item));
什么是在你的例子中'array'? @Frederik –
这就是包含元素的实际数组。当你将一个元素推入数组中时,还可以调用arraySubject上的next(),以便通知任何订阅者。当然,您也可以直接将其构建到自己的课堂中。 –
老兄,这是如何工作的?如果您订阅该主题,则不会观察已经推送到该阵列的元素,对吗? –
所以这是一个观察的是......没有。谁提出这个东西? (修辞)。感谢关于MessageQueue的提示。 – jcollum
哦,然后有FRB(http://documentup.com/montagejs/frb/)实际上会给你任何JS对象的可观察绑定。或者至少是物体的任何属性。不确定直接观察数组。 – raimohanska
从我的角度来看,使用另一个库作为RxJS提供的“主题”开箱即用的东西并不是一个好方法。 – TekTimmy