12

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不符合我的期望。

回答

1

Observable.fromArray创建一个Observable,它在您添加订阅服务器时立即触发每个数组项的事件。因此,它不会“观察”该阵列的变化。

如果您需要一个“可推式集合”,Bacon.js中的总线类可能就是您要找的。对于RxJs,我的小型MessageQueue类具有类似的功能。

+4

所以这是一个观察的是......没有。谁提出这个东西? (修辞)。感谢关于MessageQueue的提示。 – jcollum

+0

哦,然后有FRB(http://documentup.com/montagejs/frb/)实际上会给你任何JS对象的可观察绑定。或者至少是物体的任何属性。不确定直接观察数组。 – raimohanska

+1

从我的角度来看,使用另一个库作为RxJS提供的“主题”开箱即用的东西并不是一个好方法。 – TekTimmy

2

我发现Rx.Observable.ofObjectChanges(obj)正常工作。

从文档页面:

创建使用Object.observe改变的对象的可观察序列。

希望它有帮助。

+0

应该可能使用'ofArrayChanges'作为OP特别是关于数组... – Lucas

+3

ofObjectChanges已不再在RxJS 5中可用:https://github.com/ReactiveX/rxjs/blob/master/MIGRATION.md – kpup

10

在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)); 
+0

什么是在你的例子中'array'? @Frederik –

+1

这就是包含元素的实际数组。当你将一个元素推入数组中时,还可以调用arraySubject上的next(),以便通知任何订阅者。当然,您也可以直接将其构建到自己的课堂中。 –

+0

老兄,这是如何工作的?如果您订阅该主题,则不会观察已经推送到该阵列的元素,对吗? –

相关问题