24

githubのfromArrayRxwiki

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関数が作成されたときに、関数が1回だけ起動するように見えます。配列の変更を観察するのではなく、配列をそれぞれ処理するためだけに使用しているので、少し誤称のようです。ただし、そのコードはwikiにあるものとほとんど同じです。ですから、私が間違っているか、subscribe期待どおりに機能しないかのどちらかです。

4

4 に答える 4

2

Rx.Observable.ofObjectChanges(obj)が期待どおりに機能することがわかりました。

ドキュメントページから:

Object.observe を使用して、オブジェクトへの変更から Observable シーケンスを作成します。

それが役に立てば幸い。

于 2015-12-21T10:38:44.097 に答える
2

これはどう:

var subject = new Rx.Subject();
//scan example building an array over time
var example = subject.scan((acc, curr) => { 
    return acc.concat(curr);
}
,[]);

//log accumulated values
var subscribe = example.subscribe(val => 
    console.log('Accumulated array:', val)
);

//next values into subject
subject.next(['Joe']);
subject.next(['Jim']);
于 2018-04-17T10:48:17.223 に答える
1

Observable.fromArray は、サブスクライバーを追加すると、各配列アイテムのイベントをすぐに発生させる Observable を作成します。したがって、その配列への変更を「監視」することはありません。

「プッシュ可能なコレクション」が必要な場合は、Bacon.jsの Bus クラスが探しているものかもしれません。RxJ には、同様の機能を持つ小さなMessageQueueクラスがあります。

于 2013-01-23T13:26:36.193 に答える