Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/443.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 将observer存储在全局变量中并在以后使用_Javascript_Node.js_Rxjs - Fatal编程技术网

Javascript 将observer存储在全局变量中并在以后使用

Javascript 将observer存储在全局变量中并在以后使用,javascript,node.js,rxjs,Javascript,Node.js,Rxjs,我如何创建一个可观察的对象并在代码中生成下一个值?作为其他异步事件的结果,我希望能够从代码的不同部分调用onNext 这是我尝试过的,但不起作用: var Rx = require('rx'); var GlobalObserver; var source = Rx.Observable.create(observer => { GlobalObserver = observer; }); var subscription = source.subscribe( x

我如何创建一个可观察的对象并在代码中生成下一个值?作为其他异步事件的结果,我希望能够从代码的不同部分调用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);

你需要的是某种主题<代码>重播主题,
行为主题
主题
,等等

创建一个主题,然后您可以执行
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响应返回时都会添加到可观察的流中):


正如另一位用户所说,如果您使用的是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

,这肯定是一个注释,而不是答案。
var httpResponseStream = new Rx.Subject();

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

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