2017-07-31 24 views
2

オブザーバブルを作成し、コードの後半に次の値を生成するにはどうすればよいですか?他の非同期イベントの結果としてコードの異なる部分からonNextを呼び出すことができるようにしたいと思います。オブザーバをグローバル変数に格納して後で使用する

これは動作しません。これは、私が試したものです:

var Rx = require('rx'); 

var GlobalObserver; 

var source = Rx.Observable.create(observer => { 
    GlobalObserver = observer; 
}); 

var subscription = source.subscribe(
    x => console.log('onNext: %s', x), 
    e => console.log('onError: %s', e), 
    () => console.log('onCompleted') 
); 

//...later in the code, as a result of another async event: 


    GlobalObserver.onNext(someData); 
    ... 
    GlobalObserver.onNext(someOtherData); 

答えて

4

あなたには、いくつかの並べ替えの対象である必要なもの。 ReplaySubjectBehaviorSubjectSubjectなど

は、件名を作成し、その後、あなたはそれを購読するsubject.subscribe(...)を行うことができます。ストリームに追加するにはsubject.onNext(...)もできます。 (観察可能なストリームに成功したHTTPレスポンスが戻ってくるたびに追加されます)

var subject = new Rx.Subject(); 

var subscription = subject.subscribe(
    function (x) { console.log('onNext: ' + x); }, 
    function (e) { console.log('onError: ' + e.message); }, 
    function() { console.log('onCompleted'); } 
); 

subject.onNext(1); 
// => onNext: 1 

subject.onNext(2); 
// => onNext: 2 

subject.onCompleted(); 
// => onCompleted 

subscription.dispose(); 

Aより具体的なユースケース:例えば

var httpResponseStream = new Rx.Subject(); 

var subscription = httpResponseStream.subscribe(function (response) { 
    console.log('HTTP response success: ', response); 
}); 

makeAJAXCall().then(function (response) { 
    httpResponseStream.onNext(response); 
}); 

別のユーザーが述べたように、確認してくださいV5を使用している場合は、onNextnextに変更します。 V4を使用している場合は、onNextに固執してください。

1

あなたはrxjsバージョン^ 5.0.0を使用しており、バージョン^ 4.0.0のドキュメントを読んでいると仮定しています。 RxJsバージョン^5.0.0については

それはobserver.next(value)の代わりobserver.onNext(value)ことsould。ここで

あなたはRxJsバージョン^5.0.0

+0

ためdocsこれは間違いなく、コメントではなく、答えなければなりません見つけます。 – DavidDomain

関連する問題