2016-07-04 1 views
0

J'ai lu ce code si je vais remplacer scan avec map je ne peux pas obtenir la propriété "getTime" de undefined, pourquoi est-ce que cela se produit je suppose que l'opérateur prend un élément émet de observable et applique certains fonctionnent dessusRxjs: L'opérateur de balayage

this.clock = Observable.merge(
     this.click$, 
     Observable.interval(5000) 
    ) 
     .startWith(new Date()) 
     .map((acc : Date)=> { 
      const date = new Date(acc.getTime()); 
      date.setSeconds(date.getSeconds() + 1); 
      return date; 
     }); 
+0

Quelle est la sortie de 'console.log (acc)'? –

+0

son affichage undefined – blackHawk

+0

S'il vous plaît jeter un oeil sur les suggestions suivantes pour les questions de débogage: http://stackoverflow.com/help/mcve – user3743222

Répondre

0

Parce que vous fusionnez deux flux en un seul. Vous recevrez des événements de click$ ou interval. Dans ces cas, ils ne sont pas de type Date, vous pouvez donc utiliser la méthode getTime.

L'opérateur scan permet de conserver un état entre les événements. Le map convertit simplement une entrée en sortie. Dans le cas du dernier, vous recevrez l'événement lui-même ...

+0

Qu'est-ce que cela signifie que l'opérateur de scan garde un état entre les événements? – blackHawk

+0

Je suppose que .startWith (new Date()) qui émet un objet date et une map recevront si getTime doit être lu sur acc – blackHawk

+0

Oui mais c'est seulement pour le premier événement ... Donc, il va initialiser la valeur reçue en premier par le rappel de scan. –