2016-07-04 1 views
0

Я читал этот код, если я заменил сканирование на карту. Я получаю не могу получить свойство «getTime» неопределенного, почему это происходит. Я предполагаю, что оба оператора берут элемент из наблюдаемого и применяют некоторая функция на немRxjs: Оператор сканирования

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

Каков вывод 'console.log (acc)'? –

+0

его отображение не определено – blackHawk

+0

Пожалуйста, ознакомьтесь с нижеследующими предложениями по отладке вопросов: http://stackoverflow.com/help/mcve – user3743222

ответ

0

Потому что вы объедините два потока в один. Вы получите события от click$ или interval. В этих случаях они не относятся к типу Date, поэтому вы можете использовать метод getTime.

Оператор scan позволяет сохранять состояние между событиями. map просто преобразует входной сигнал в выходной сигнал. В случае последнего вы получите событие самого себя ...

+0

Что означает, что оператор сканирования сохраняет состояние между событиями – blackHawk

+0

Я предполагаю, что .startWith (новая дата()), испускающая объект даты и карту, получит это так getTime следует читать по acc – blackHawk

+0

Да, но это только для первого события ... Таким образом, он будет инициализировать значение, полученное первым путем обратного вызова сканирования. –