Comment puis-je remplacer un abonné avec un observateur?

voix
0

Cette question sur GitHub résume assez bien en place. Je suis en utilisant un timer()avec un programme récurrent de 1 seconde pour effectuer une tâche. Je le couplez avec un Subscriberde souscrire les intervalles. Quand un certain modèle court de données, je désabonner et attendre les nouveaux arrivants. Quand ils des données est à nouveau rempli, j'essaie de réabonner , mais il ne fonctionne pas. Il se trouve whena Subscribera été unsub'd, je ne peux pas l' utiliser à nouveau. Je dois donc le remplacer par un Observer. Un débutant ici, Je ne sais pas comment faire. essayé de regarder des exemples, ils me confondre juste plus loin.

Comment puis-je remplacer le code suivant pour fonctionner avec un Observerlieu?

private timer = timer(1000, 1000);

// A timer subscription that keeps sending new images to the observer
timerSubscription = new Subscriber(() => {

    // Check if there is an element in the list
    if (this.head != null) {

      // If the current node at head is a folder, unsubscribe the listener
      if (this.head.data['id'].startsWith('folder')) {
        this.timerSubscription.unsubscribe();
      }

      // Pop a node from the list and pass on to observer
      this.observer.next(this.this$PiFrame.pop());

    } else {

      // If no nodes are left, unsubscribe from the timer
      this.timerSubscription.unsubscribe();

      console.log('No items left on the queue. Deactivating timer subscription.');
    }
  }, e => {}, () => {});

et je souscris comme ceci:

    ...
    // Setup a timer to pop every 1000 ms
    this.timer.subscribe(this.this$PiFrame.timerSubscription);
    ...
    // If no nodes are left, unsubscribe from the timer
    this.timerSubscription.unsubscribe();
    ...
Créé 02/09/2018 à 05:37
source utilisateur
Dans d'autres langues...                            


1 réponses

voix
1

Au lieu de créer l'abonnement comme vous le faites, que le Observableretour de l'abonnement.

Gardez votre logique dans une fonction, comme suit:

  doWhatever() {
    console.log("tick")

    // Check if there is an element in the list
    if (this.head != null) {

      // If the current node at head is a folder, unsubscribe the listener
      if (this.head.data['id'].startsWith('folder')) {
        this.timerSubscription.unsubscribe();
      }

      // Pop a node from the list and pass on to observer
      this.observer.next(this.this$PiFrame.pop());

    } else {

      // If no nodes are left, unsubscribe from the timer
      this.timerSubscription.unsubscribe();

      console.log('No items left on the queue. Deactivating timer subscription.');
    }
  }

Ensuite, lorsque vous souhaitez vous abonner:

this.timerSubscription = this.timer.subscribe(() => this.doWhatever());

Cela peut être utilisé de façon répétée, que chacun subscribegénère une nouvelleSubscription

Créé 02/09/2018 à 06:28
source utilisateur

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more