如何使用rx.js订阅承诺?

时间:2014-07-31 14:37:26

标签: javascript rxjs

我有一个返回承诺的功能 我希望使用rx.js订阅该承诺,以便调用此函数将通知所有订阅者。

这就是我所拥有的:

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

//here I want to push first notification
subject.fromPromise(functionThatReturnsPromise()); 

//some code

//here I want to push second notification
subject.fromPromise(functionThatReturnsPromise()); 

因此,订阅者只收到一个通知。

如何解决?

1 个答案:

答案 0 :(得分:5)

var subject = new Rx.Subject();

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

subject.onNext(Rx.Observable.fromPromise(functionThatReturnsPromise()));

//some code

subject.onNext(Rx.Observable.fromPromise(functionThatReturnsPromise()));

这里的主题现在是一个元流(可观察到的观察者)。在订阅它之前,我们已经'#34; flatten"通过致电mergeAll()来实现。在onNext()我们正在向主题提供Observables,这就是使它成为元流的原因。