2016-06-11 6 views
2

특정 시간에 발생하도록 미리 정의 된 이벤트가 있습니다. 그리고이 같은 타이머를 가지고 : (실제로는 완전히 괜찮 더 같은 101200302401500을 ... 비록)RxJs : 미리 정의 된 시간에 이벤트를 방출하는 방법은 무엇입니까?

const timer = Rx.Observable.interval(100).timeInterval() 
    .map(x => x.interval) 
    .scan((ms, total) => total + ms, 0) 

타이머는 100200300400500에 가까운 무언가를 방출 나는 또한 내가하고 싶은 몇 가지 물건을 가지고 특정 시간에. 결과 스트림이 한 번 당 값을 방출하는 것을

const stuff = Rx.Observable.from([1000, 2000, 2250, 3000, 5000]); 

내가 원하는 것은 그런 방법으로 "재료"와 "타이머"를 결합하는 것입니다 : 예를 들어, 나는 다음과 같은 시간에 물건을하고 싶은 말을하자 그 시간에 "stuff"에 정의 된 시간 (또는 약간 나중에). 이 경우 t = 1000 ms, 2000 ms, 2250 ms, 3000 ms 및 5000 ms가됩니다. 참고 : 2250 사람은 간격 크기로 인해 2300 년경에 방출해야합니다. 괜찮아. 그들은 일찍 또는 한 번 이상 올 수 없습니다.

나는 하나의 해결책이 있지만 그다지 좋지 않습니다. 매 단계마다 (이 경우 100 밀리 초마다) "stuff"를 다시 시작하고 1을 취합니다. 이벤트가 "stuff"에서 방출되면 사라질 것입니다. 그 값들은 없습니다. 실제 응용 프로그램에서

는 ... 물건과 stuff2 어쩌면 stuff3있을 것입니다 (하지만 난 뭔가! 그들을 호출) 사전에

감사합니다! 나는 그것이 분명했기를 바란다.

답변

5

내가 제대로 계신 이해했다면,이 간단한 돌출부와 달성해야한다 : 두 번째를 들어 https://jsbin.com/negiyizibu/edit?html,js,console,output

편집

: 여기

const times$ = stuff.flatMap(x => Rx.Observable.timer(x)); 

는 작업 예제입니다 요구 사항을 다음과 같이 시도하십시오.

const times$ = Rx.Observable 
       .from([{"val":"jeff", "t": 1000}, {"val":"fred", "t": 2500}]) 
       .flatMap(x => Rx.Observable.timer(x.t).map(y => x.val)); 

https://jsbin.com/cegijudoci/edit?js,console,output

+0

그것은 내가 원하는 것만은 아니지만 ... 물건 배열은 그들 사이의 지연이 아니라 언제 발생해야하는지에 대한 것입니다. 나는 항상 그것을 바꿀 수 있었다. lemme see ... 나는 물건이 숫자 배열 일뿐 아니라 [{ "t": 1000, "val": "xyz"}와 같을 것이라고 생각합니다. ], 그리고 정말로, 내가 쫓고있는 것은 "xyz"가 시간 1000에 방출된다는 것입니다. 그러나 이것으로 노는 것 ... –

+0

const stuff = Rx.Observable.from ([{ "val": "jeff", "t ": 1000}, {"val ":"fred ","t ": 2500}]); stuff .flatMap (x => Rx.Observable.timer (x.t)) .subscribe (x => console.log (x)); // 그냥 "0"을 낸다. 나는 1000ms에서 "jeff"를, 2500ms에서 "fred"를 원합니다 ... 제프 후 2500ms가 아니라 1500 –

+0

제공된 솔루션은 지정된 시간에 방출됩니다. 포함 된 샘플을 실행하면 두 번째 요소와 세 번째 요소 사이의 시간이 매우 짧음을 알 수 있습니다 (250ms가 아니라 2250ms). 아니면 아직도 오해하고 있습니까? –