2017-02-24 2 views
1

Ich habe ein Thema eingerichtet und dann einige Methoden darauf. Es scheint zu funktionieren, bis es zu .switch() kommt, von dem ich dachte, dass es einfach den letzten Anruf verfolgen würde. Ich bekomme den Fehler Property 'subscribe' does not exist on type 'ApiChange' Es scheint, es von einer beobachtbaren zu ApiChange zu konvertieren. Ich verstehe dieses Verhalten nicht. Sollte ich einen anderen Betreiber benutzen?rxjs switch auspacken beobachtbar


Service:

private apiChange = new Subject<ApiChange>(); 
    apiChange$ = this.apiChange.asObservable().distinctUntilChanged().debounceTime(1000).switch(); 

Komponente:

this.service.apiChange$.subscribe(change => { 
      this.service.method(change); 
     }); 
+1

Hallo! Kannst du bitte erklären, was du mit "den letzten Anruf merken" gemeint hast? switch() erwartet, auf einer beobachtbaren Kette höherer Ordnung aufgerufen zu werden (beobachtbar, die Observables statt Werte aussendet) –

+0

Nur dass die letzte Auswahl zurückgegeben wird. –

+0

Können Sie mir ein Beispiel dafür geben, was Sie damit meinen: switch() erwartet, dass eine beobachtbare Kette höherer Ordnung aufgerufen wird (beobachtbar, die Observable statt Werte ausgibt) –

Antwort

3

.debounceTime (1000) bereits versichern Sie werden nur maximal erhalten von einem Wert, der von Ihrer beobachtbaren Kette pro Sekunde emittiert wird. Alle Werte, die der Ruhezeit von 1 Sekunde vorausgehen, werden bereits verworfen.

Mit einem einfachen Gegenstand (kein ReplaySubject), werden vergangene Werte ohnehin nicht an Abonnenten zur Verfügung gestellt.

Sie möchten wahrscheinlich nur die .switch() überspringen und genießen Sie die Kette ohne sie.

+0

Genau was ich war auf der Suche nach. Das macht Sinn. –

+0

Hmm endet nicht in dem Fall, dass ein Anruf nach der Debounce ausgelöst wird, die weniger Zeit als der andere Aufruf benötigt, um zurückzukehren. –

+0

Ohne mehr Kontext wäre es schwierig für mich, einen nützlichen Kommentar abzugeben. Kannst du bitte klären, ob du http-Aufrufe als Teil deiner Subscribe-Methode machst und nur ihre Ergebnisse in einem anderen Abo verwendest? Dann würde ich switchMap() als Teil der beobachtbaren Kette empfehlen und den http-Aufruf dort machen. Dies würde vorherige http-Aufrufe "abbrechen" und nur die letzte Antwort verarbeiten. –

Verwandte Themen