将观察者存储在全局变量中并在以后使用它 [英] Storing observer in a global variable and use it later

查看:57
本文介绍了将观察者存储在全局变量中并在以后使用它的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

如何在代码中创建一个observable并在后面生成下一个值?我希望能够通过其他异步事件从代码的不同部分调用onNext。

How can I create an observable and generate the next value later in the code? I would like to be able to call onNext from different parts of the code as a result of other async events.

这是我试过的,但是不起作用:

This is what I have tried, which doesn't work:

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


推荐答案

您需要的是某种主题。 ReplaySubject BehaviorSubject 主题

What you need is a subject of some sort. ReplaySubject, BehaviorSubject, Subject, etc.

创建一个主题,然后你可以 subject.subscribe(...)订阅它。您也可以 subject.onNext(...)添加到流中。

Create a subject, then you can do subject.subscribe(...) to subscribe to it. You can also do subject.onNext(...) to add to the stream.

例如:

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响应返回时都会添加到可观察流) :

A more specific use case (will add to the observable stream every time a successful HTTP response comes back):

var httpResponseStream = new Rx.Subject();

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

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

正如另一位用户所说,请确保更改所有 onNext 下一步。如果您使用的是V4,请坚持 onNext

As another user stated, make sure you change all onNext's to next if you are using V5. If you are using V4, stick to onNext.

这篇关于将观察者存储在全局变量中并在以后使用它的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆