2016-04-09 28 views
3

Şu anda RxJS sayesinde Reaktif olarak düşünmeyi öğreniyorum. Şimdi, bir RxJS kitap (RxJS ile Reaktif Programlama) okuyorum ve AsyncSubject hakkında okudum ve sadece alınan son değeri nasıl önbelleğe alıyorum. Bilmek istediğim, sunucuyu güncellemek ve bu gözlemlenebilir güncellemeye sahip olmak istesem ne olur? OnComplete çağrıldığı için yepyeni bir gözlemci oluşturmam gerekiyor mu? Takip etmem gereken başka bir desen var mı?RxJS Eşzamansız İstek Güncelleştirmesi

Genel gereksinim, sunucuya veriyi sunucudan ve sunucudan temiz bir şekilde geçirme ve gözlemlenebilir (model) taze kalmamı sağlamaktır. onCompleted çağrıldıktan sonra

sayesinde Lee şüpheli olarak

+0

Neden Websockets ile gözlenmez? –

+0

Aradığınız davranış hakkında daha açık olabilir misiniz? Örneğin, girdi ile beklenen çıktıyı belirtin veya bir mermer diyagram çizin. Eğer neden/kim onComplete denir açıklarsanız, – user3743222

+0

çağırırsanız, her seferinde yeni bir gözlemci oluşturmak yerine, gerektiğinde sunucuyu sorgulayabilmem gerektiğini açıklamak güzel olurdu. Bir gözlemcinin tamamlanmasını nasıl durduracağımı tam olarak bilmiyordum. –

cevap

2

, bir AsyncSubject değerini değiştiremez. Basit bir "basit bir" ile çağrı yapmak için tipik yolu "çağrıları arasındaki değeri önbelleğe alın" senaryosu, sunucu çağrınızı temsil eden bir AsyncSubject ile gözlemlenebilir tetiği eşlemek için flatMapLatest kullanmaktır. Eğer bazı verileri her 30 saniyede yenilemek istiyorsa Örneğin, böyle bir şey yapabilir: Senin durumunda

const subscription = Rx.Observable 
    .interval(30000) 
    .flatMapLatest(() => serverCall()) 
    .subscribe(x => doStuffWithResult(x)); 
+0

Aradığım şey bu. Benim örneğimde, sunucunun yalnızca gerektiğinde ve daha fazlasında sorgulanmasını sağlamak için bir aralıktan ziyade bir konu tetikleyici kullanacağım. –

0

istediğiniz beri, WebSockets kullanmayı düşünün your observable (model) fresh at all times

şey

gibi
var source = Rx.Observable.create(function (observer) { 
    websocket.onmessage = function(msg) { 
     observer.onNext(msg); 
    } 

    websocket.onerror = function(error) { 
     observer.onError(error); 
    } 

    websocket.onclose = function (msg) { 
     observer.onComplete(msg); 
    } 
}); 

Aksi takdirde bir aralık kullanabilirsiniz

const subscription = Rx.Observable 
    .interval(1000) 
    .flatMapLatest(() => Rx.Observable.fromPromise(fetch(...).then(response => response.json()).retry(5)) 
    .subscribe(response => response); 

Hata varsa hemen pes etmemek için retry operatörünü kullanabilirsiniz.

+0

Teşekkürler, ikinci örneğiniz daha iyi. REST arayüzü halihazırda mevcut olduğu için şu an websockets'lardan kaçınmam gerekiyor. –