我有一个返回承诺的功能 我希望使用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());
因此,订阅者只收到一个通知。
如何解决?
答案 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,这就是使它成为元流的原因。