2016-01-21 21 views
7

Gözlemcileri kullanarak bir geri sayım sayacı oluşturmak için uğraşıyorum, http://reactivex.io/documentation/operators/timer.html'daki örnekler işe yaramaz. Bu özel örnekte, timerInterval ile ilgili hata, Gözlemcinin bir fonksiyonu değil, zamanlayıcıdan döndürülür.RxJS Observables ile geri sayım sayacı nasıl yapılır?

Ben de diğer yaklaşımlar ve ben ile geldim iyi deneyler yapıyorlar

olduğunu :

Observable.interval(1000).take(10).subscribe(x => console.log(x)); 

Buradaki sorun bu 0 ile 10 arasında yukarı sayar ve ben bir geri sayım sayacı örn istiyorum 10,9,8 ... 0.

Ben de bu denedim ama hiç çıktı üretir ki, hem timer yanı

Observable.range(10, 0).timer(1000).subscribe(x => console.log(x)); 

Gözlemlenebilir türü için mevcut değil.

Observable.range(10, 0).debounceTime(1000).subscribe(x => console.log(x)); 

Ben ReactiveX en RxJS uygulanması değil, Mircosoft versiyonu yardıma ihtiyacım netleştirmek için.

cevap

15

Sen doğru yolda - Sorunun timer (RxJS docs bakınız) (ve dolayısıyla Observable.range() üzerine) prototip üzerinde ancak gözlemlenebilir mevcut değil olmasıydı. Yani aralığıyla jsbin

const start = 10; 
Rx.Observable 
    .timer(100, 100) // timer(firstValueDelay, intervalBetweenValues) 
    .map(i => start - i) 
    .take(start + 1) 
    .subscribe(i => console.log(i)); 

// or 
Rx.Observable 
    .range(0, start + 1) 
    .map(i => start - i) 
    .subscribe(i => console.log(i)); 
+1

Teşekkür ne kadar süre belirlemenizi sağlar. İşe yarıyor, bunu Gözlemcilerle yapmanın daha basit yolları olması gerektiğini düşünüyor. İdeal olarak, yalnızca arttıkça aralıktan ziyade geri sayım (başlatma, sayma) sağlayan bir yineleyici operatördür. –

+0

Umarım bir başkası bir yol sağlayabilir. O zamana kadar: Uygulamayı gizlemek için Gözlemlenebilir prototipini genişletmeyi düşündünüz mü (ör. [Bunun gibi] (https://github.com/Nupf/cull/blob/master/src/Observable.js))? –

+0

Bunu yapan bir operatör var, 'oluştur' henüz henüz yeni projeye eklenmedi. – paulpdaniels

0

, ikinci bir öneriniz için

const time = 5 // 5 seconds var timer$ = Rx.Observable.interval(1000) // 1000 = 1 second timer$ .take(time) .map((v)=>(time-1)-v) // to reach zero .subscribe((v)=>console.log('Countdown', v))

İlgili konular