2017-06-30 4 views
1

Ich bin derzeit RxJS Observable/Abonnement unter Verwendung ähnlicher HTTP-Anforderungen als Code auszuführen, um unten zeigt:RxJS detect lange Abonnement läuft

this.waiting = true; 
this.doSomething().subscribe(
     (result) => { 
     this.waiting = false; 
     this.showResult= true; 
     } 
); 

Was ich wirklich tun möchte, ist nur dann gesetzt this.waiting auf true auf einer vorbestimmten Zeitdauer. Mit anderen Worten, Sie warten nur wirklich, wenn das Observable nicht innerhalb von etwa 30 Sekunden zurückgekommen ist. Ich frage mich, wie ich das erreichen kann. Ich sehe, dass es eine Timer-Methode gibt, die aber erst nach dieser Zeit beginnt, zu abonnieren.

Antwort

3

Schauen Sie sich timeout() und timeoutWith() Operatoren an. Diese haben keine Dokumentation, aber von ihren Parametern können Sie raten, was sie tun.

Der Operator timeout() senden eine error Benachrichtigung nach einiger Zeit der Inaktivität.

Die timeoutWith() Ich denke, lassen Sie die Quelle Observable mit einem anderen Observable nach einiger Zeit der Inaktivität ersetzen.

Schließlich, wenn Sie diese beiden Betreiber vermeiden möchten, können Sie Observable.race verwenden, die auf die erste beobachtbare intern nur abonniert, die emittiert:

Observable.race(Observable.timer(30 * 1000).take(1), this.doSomething()) 
0

Ich weiß nicht, einen Operator, der dies tut, aber das JS-Code

const source = Rx.Observable.of(1).delay(1000); 
const sub = source.subscribe(val => console.log(val)); 
setTimeout(() => { 
    sub.unsubscribe(); 
    console.log('timeout') 
}, 500); 

tun sollten Sie mit Verzögerung und SetTimeout Werte spielen, um kann.

Verwandte Themen