나는 추위와 뜨거운 Observable의 차이를 이해한다고 생각했지만, 분명히 뭔가가 나를 벗어납니다. 이와예기치 못한 추위 Observable behavior
var obs = Rx.Observable.interval(2000);
var A = obs.subscribe(function(value) { console.log('A', value) });
var B = obs.subscribe(function(value) { console.log('B', value) });
, 나는 다음과 같은 결과를 얻을 :이 코드는 예상대로 작동
var obs = Rx.Observable.interval(2000).flatMap(function() {
return Rx.DOM.jsonpRequest({ url: URL });
})
.map(function(value) { return value.prop; });
var A = obs.subscribe(function(value) { console.log('A', value) });
var B = obs.subscribe(function(value) { console.log('B', value) });
I :
A 0
B 0
A 1
B 1
...
을하지만 원격 JSONP 리소스를 검색 할 flatMap
를 추가 할 때 A
로그 만 수신 :
A prop
A prop
A prop
...
Observable을 publish().refCount()
을 사용하여 뜨거운 것으로 바꾸면 예상대로 작동합니다. 두 구독자가 동일한 값을 수신한다는 것입니다.
Observer가 감기에 걸리므로 같은 값을 동시에 수신하지 않아도되지만 A
및 B
명의 관찰자가 모두 A
뿐만 아니라 값을 수신 할 것으로 예상됩니다.
무엇이 여기에 있습니까?
실제로 작동해야합니다. 'jsonpRequest' 줄 앞에'console.log' 문을 넣으십시오. 또한 onError와 onComplete 핸들러를 더 많은 로그 문으로'subscribe' 호출에 추가하십시오. 아마도'B' 구독이 중복 된 jsonp 요청을 발행하려고 할 때 이상한 이유로 실패했을 것입니다. – Brandon
아무런 오류가 없습니다. 그렇지만'jsonpRequest' 라인 앞의'console.log'는 두 번 호출됩니다. 또한'setTimeout' 안에'B'를 넣으면 예상대로 작동합니다./cc @Brandon – GiantSquid