Önceden belirlenmiş bir aralıkta yayılan bir gözlenebilirliği nasıl yapılandırabilirim, fakat aynı zamanda bir ikinci gözlenebilir bir yaydığı zaman yaymak için de yapılabilir, bu noktada aralık tekrar tekrar yaymaya başlamak için "sıfırlanır". ikinci ping noktasından başlayan orijinal aralık? Örneğin, aralığın 10 dakika olduğunu varsayalım diyelim. Gözlemlenebilir, 10, 20, 30, vb. Yayacaktır. Fakat diyelim ki, 15'de gözle görülebilen ikinci gözlemlenebilir. Sonra, genel gözlemlenebilir, 10, 15, 25, 35, vs.'de ping yapmalıdır.Sıfırlanabilir Gözlemlenebilir.interval
5
A
cevap
1
İşte benim denemem. İstediğinizi yapar, ama özellikle zarif değildir.
import * as Rx from "rxjs/Rx";
const resetter = new Rx.Subject();
const resettableInterval = Rx.Observable.of(0)
.concat(resetter)
.switchMap((value, index) => {
let interval = Rx.Observable.interval(1000);
if (index > 0) {
interval = Rx.Observable.of(-1).concat(interval).map((value) => value + 1);
}
return interval;
});
const since = Date.now();
resettableInterval.subscribe(
(value) => { console.log(`${((Date.now() - since)/1000).toFixed(1)}: ${value}`); }
);
setTimeout(() => { resetter.next(0); }, 1500);
ilk gözlenebilir switchMap
kullanılarak aralığını başlar tekme tek bir değer içerir. Gözlemlenebilen sıfırlayıcı birleştirildi, böylece aralık her saldığında sıfırlanır. switchMap
operatörü tarafından sağlanan index
parametresi, aralığın başlangıç değerinin yayılıp yayılmayacağını belirlemek için kullanılır. (Eğer map
kaldırabilir, duyulur artan sayılarla umurumda değil ise - sadece sıfırlanır yayan numaralarını olunması için kullanılmadan, vb)
çıkışı olmalıdır:
1.0: 0
1.5: 0
2.5: 1
3.5: 2
4.5: 3
5.5: 4
...
5
switchMap
saniyenin ilk akışı.
//Outer timer fires once initially and then every 15 minutes
Rx.Observable.timer(0, 15 * 60 * 1000 /*15 minutes*/)
//Each outer event cancels the previous inner one and starts a new one
.switchMap(outer => Rx.Observable.interval(10 * 60 * 1000 /*10 minutes*/))
.subscribe(x => console.log(x));
yukarıdaki sonucu her on dakikada yayar ama ne zaman dış Observable
yangınları sıfırlamak alır bir Observable
olurdu.
3
açısal yılında 4 aşağıdaki
private ngUnSubscribe: Subject<void> = new Subject<void>();
ngOnDestroy() {
this.ngUnSubscribe.next();
this.ngUnSubscribe.complete();
}
ngOnInit() {
this.pillar_timer_interval = IntervalObservable.create(3500);
this.startInterval();
}
startIntervale() {
this.pillar_timer_interval
.takeUntil(this.ngUnSubscribe)
.subscribe((value) => {
//whatever function you calling every 3.5s
});
}
resetInterval() {
this.ngUnSubscribe.next();
this.startInterval();
}
ile Aralığı sıfırlamak için yönetilen
İlgili konular
- 1. Bitirildikten sonra bir sahte side_effect yineleyici sıfırlanabilir mi?
- 2. Subversion: Dallanma/etiketlemeden sonra gövde önceki revizyona sıfırlanabilir mi?
- 3. TOpenDialog'un boyutlandırma verileri nerede saklanır ve bu nasıl sıfırlanabilir?
- 4. Tüm Excel sayfalarını tanımlanmış bir yakınlaştırma düzeyinde ayarlama
- 5. TFS 2010 Ekip Oluşturma Revizyonu $ (Rev: .r) Nerede Saklı?
- 6. SystemClock.uptimeMillis() hiç nasıl sarılabilir?
- 7. Neden form kimlik doğrulaması zaman aşımını oturum zaman aşımından daha uzun ayarlıyorsunuz?
- 8. Bir girdinin gerçek değer özniteliğini jQuery
- 9. Java: JAXB: JAXBElement <Calendar>'un xs'ye eklenmesi: tarih bilinmiyor
- 10. can_upload flag ile ilgili sorunlar
- 11. Karışıklık iç asenkron I/O mekanizmasını
- 12. Search2 hiçbir sonuç döndürmediğinde Select2 filtre değerleri kayboluyor