RxJS : Observable을 "수동으로"어떻게 업데이트합니까?
내 생각에 이것은 관찰 가능한 것의 가장 기본적인 경우 여야하기 때문에 나는 근본적인 것을 오해해야한다고 생각하지만 내 인생에서는 나는 그것을 문서에서 어떻게 해야하는지 알 수 없다.
기본적으로 나는 이것을 할 수 있기를 원합니다.
// create a dummy observable, which I would update manually
var eventObservable = rx.Observable.create(function(observer){});
var observer = eventObservable.subscribe(
function(x){
console.log('next: ' + x);
}
...
var my_function = function(){
eventObservable.push('foo');
//'push' adds an event to the datastream, the observer gets it and prints
// next: foo
}
그러나 나는 같은 방법을 찾지 못했습니다 push
. 나는 이것을 클릭 핸들러 Observable.fromEvent
로 사용하고 있으며, 그것들을 위해 그것을 알고 있지만 React와 함께 사용하려고하고 있으며 완전히 다른 것을 사용하는 대신 콜백에서 단순히 데이터 스트림을 업데이트 할 수 있습니다. 이벤트 처리 시스템. 그래서 기본적으로 나는 이것을 원합니다.
$( "#target" ).click(function(e) {
eventObservable.push(e.target.text());
});
내가 얻은 가장 가까운 것은을 사용 observer.onNext('foo')
했지만 실제로는 작동하지 않는 것으로 보이며 관찰자에게 호출 된 것 같습니다. 관찰자는 데이터 스트림에 반응하는 것이지, 데이터 스트림을 변경하지 말아야합니다.
관찰자 / 관찰 가능한 관계를 이해하지 못합니까?
RX에서 Observer와 Observable은 별개의 엔티티입니다. 관찰자는 Observable을 구독합니다. Observable은 옵저버의 메소드를 호출하여 옵저버에게 항목을 내 보냅니다. 범위 밖에서 옵저버 메서드를 호출해야하는 경우 옵저버 Observable.create()
역할을하는 프록시 인 Subject를 사용할 수 있습니다.
당신은 이렇게 할 수 있습니다 :
var eventStream = new Rx.Subject();
var subscription = eventStream.subscribe(
function (x) {
console.log('Next: ' + x);
},
function (err) {
console.log('Error: ' + err);
},
function () {
console.log('Completed');
});
var my_function = function() {
eventStream.next('foo');
}
주제에 대한 자세한 정보는 여기에서 찾을 수 있습니다.
- https://github.com/Reactive-Extensions/RxJS/blob/master/doc/api/subjects/subject.md
- http://reactivex.io/documentation/subject.html
I believe Observable.create()
does not take an observer as callback param but an emitter. So if you want to add a new value to your Observable try this instead:
var emitter;
var observable = Rx.Observable.create(e => emitter = e);
var observer = {
next: function(next) {
console.log(next);
},
error: function(error) {
console.log(error);
},
complete: function() {
console.log("done");
}
}
observable.subscribe(observer);
emitter.next('foo');
emitter.next('bar');
emitter.next('baz');
emitter.complete();
//console output
//"foo"
//"bar"
//"baz"
//"done"
Yes Subject makes it easier, providing Observable and Observer in the same object, but it's not exactly the same, as Subject allows you to subscribe multiple observers to the same observable when an observable only send data to the last subscribed observer, so use it consciously. Here's a JsBin if you want to tinker with it.
참고URL : https://stackoverflow.com/questions/33324227/rxjs-how-would-i-manually-update-an-observable
'Programing' 카테고리의 다른 글
Xcode6 : 시뮬레이터의 두 인스턴스 실행 (0) | 2020.07.11 |
---|---|
JSTL을 사용하여 맵을 반복합니다. (0) | 2020.07.11 |
Maven JAXB 플러그인의 차이점 (0) | 2020.07.10 |
iOS 7.0 코드 서명 ID가 없습니다. (0) | 2020.07.10 |
github에서 문제를 다시 여는 방법은 무엇입니까? (0) | 2020.07.10 |