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

老兄,這是如何工作的?如果您訂閱該主題,則不會觀察已經推送到該陣列的元素,對嗎? –

相關問題