하나의 주제를 통해 모든 다른 이벤트 스트림을 프록시해야합니다.하나의 주제를 사용하여 서로 다른 이벤트 스트림을 전파하십시오.
는이 코드를 내놓았다 :
var mySubject,
getObservable;
getObservable = function (subject, eventName) {
return subject
.asObservable()
.filter(function (x) {
return x.EventName === eventName;
})
.flatMap(function (x) {
if (x.Type === 'onNext') {
return Rx.Observable.return(x.Data);
}
if (x.Type === 'onError') {
return Rx.Observable.throw(x.Data);
}
return Rx.Observable.empty();
});
};
mySubject = new Rx.Subject();
getObservable(mySubject, 'foo')
.subscribe(function(x){
console.log('foo onNext ' + x);
}, function(x){
console.log('foo onError ' + x);
}, function(){
console.log('foo onComplete');
});
getObservable(mySubject, 'bar')
.subscribe(function(x){
console.log('bar onNext ' + x);
}, function(x){
console.log('bar onError ' + x);
}, function(){
console.log('bar onComplete');
});
mySubject.onNext({Type: 'onNext', EventName: 'foo', Data: 5});
mySubject.onNext({Type: 'onCompleted', EventName: 'foo'});
mySubject.onNext({Type: 'onNext', EventName: 'bar', Data: 5});
mySubject.onNext({Type: 'onError', EventName: 'bar', Data: 'Error message'});
있어 출력 :
foo onNext 5
bar onNext 5
bar onError Error message
예상 출력 : bar
이벤트의
foo onNext 5
foo onCompleted
bar onNext 5
bar onError Error message
, 매력처럼 작동 : onNext
전파됩니다. d 오류가 발생하자마자 onError
함수가 호출되고 이벤트 스트림이 완료됩니다. 그러나 onComplete
에서 작동하지 않습니다.
완전한 알림이 발생할 때마다 Rx.Observable.empty()
이 호출되지만 구독자 onComplete
처리기가 호출되지는 않습니다. 대신 자사의 전화는 onNext
입니다.
위대한 작품 마이크. 아직도, 나는 나의 처음 시도가 작동하지 않은 까 왜 보지 못한다. – Christoph