1

ためonCompletedを防ぐ:観測 - の私はそうのような配列を持っているとしましょう配列

const values = [1,2,3]; 

私はそうのように、この配列から、観察を作成します。

const obs = Rx.Observable.from(values); 

は、私はそうのようにサブスクライブ:

obs.subscribe(
    function onNext(result){ 
     console.log('item =>', result); 
    }, 
    function onError(e){ 
     console.error(e.stack || e); 
    }, 
    function onCompleted(){ 
     console.log('observable is completed'); 
    } 
); 

私が抱えている問題は、次のように新しいアイテムを配列にプッシュした場合です。

setTimeout(function(){ 
    values.push(4); 
    values.push(5); 
    values.push(6); 
}, 3000); 

これらの項目(4,5,6)はsubscribe()コールバックには表示されません!

私の質問は、オブザーバのコールバックが起動するように、アイテムが将来アレイにプッシュされるように、「オープン状態を維持できる」オブザーバブルアレイを作成するにはどうすればいいですか?

私はこのための要旨作成:

https://gist.github.com/ORESoftware/677ad0a3adf41c04a60829921ba4c4c4

、ここではフィドルです:

https://jsfiddle.net/mcq40Lmg/

+1

現在の設定では、observableは配列の更新を監視しません。オブザーバブルは最初に持っていた値で作成されます。あなたは何を必要としますかは、主題です。 –

+0

@AadiDroidありがとう、あなたはより詳細な答えを追加できますか?私は完全にオブザーバブルに新しいです –

+0

@AlexanderMillsまず、オブザーバパターンとrxの基本的な理論を学ぶことをお勧めします。例による学習は苦しいでしょう。 – Asti

答えて

1

あなたが直接呼び出して値をプッシュする機能を探しているなら、あなたSubject<T>を使用する必要があります。日常業務のため

const values = Rx.Observable.Subject(); 

setTimeout(function(){ 

    values.onNext(4); 
    values.onNext(5); 
    values.onNext(6); 

}, 3000); 

使用する被験者は良いプラクティスと考え、およびRxの精神に反するされていません。被験者は、本質的に、Rxの可変変数である。

ほとんどの場合、組み込み演算子から必要な機能を取得したり、既存の演算子を組み合わせた新しい関数を作成したりすることができます。

+0

これは私のために働いていますが、なぜこのことが変わるのですか? –