簡體   English   中英

將觀察者存儲在全局變量中,以后使用

[英]Storing observer in a global variable and use it later

如何在代碼后面創建可觀察對象並生成下一個值? 由於其他異步事件,我希望能夠從代碼的不同部分調用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);

您需要的是某種主題。 ReplaySubjectBehaviorSubjectSubject等。

創建一個主題,然后您可以執行subject.subscribe(...)進行訂閱。 您也可以執行subject.onNext(...)添加到流中。

例如:

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();

一個更具體的用例(每次成功返回HTTP響應時,都會添加到可觀察流中):

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,請確保將所有onNext更改為next 如果您使用的是V4,請堅持使用onNext

我假設這是因為您使用的是rxjs版本^ 5.0.0,並閱讀了文檔^ 4.0.0。

對於RxJs版本^5.0.0它應該是observer.next(value)而不是observer.onNext(value)

在這里您可以找到RxJs版本^5.0.0文檔

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM