redux-observable: интервал возврата из Epic

Я пытаюсь преобразовать следующий эффект @ngrx в эпопею, наблюдаемую при редукции:

  @Effect()
  startReading$ =
    this.actions$.ofType('START_READING').switchMap(() => {
      return Observable.interval(200)
        .takeUntil(
          this.actions$.ofType('ABORT_PAGE_PROCESSING))
        .mapTo({ type: 'PROCESS_PAGE' });
    });

Моя попытка заключалась в следующем:

export const startReadingEpic = action$ =>
  action$
    .ofType('START_READING')
    .switchMap(() =>
      Observable.interval(200)
        .takeUntil(action$.ofType('ABORT_PAGE_PROCESSING'))
        .mapTo({ type: 'PROCESS_PAGE' })
    );

который, похоже, не работает. Однако возврат одного Observable.of ({type: 'PROCESS_PAGE'}) работает нормально.

Пропустил ли я что-нибудь, что требовалось для redux-observable, которое изначально обрабатывается @ngrx?

Спасибо.


person Bruno D'Auria    schedule 02.08.2017    source источник
comment
Код выглядит правильно. Что именно не работает? Не могли бы вы зарегистрировать действия?   -  person Sergey Karavaev    schedule 03.08.2017
comment
Я регистрирую все действия, проходящие через мое приложение. При использовании версии Observable.interval ничего не выходит из эпоса. Он отправляется с помощью Observable.of ({type: 'PROCESS_PAGE'})   -  person Bruno D'Auria    schedule 03.08.2017
comment
На всякий случай: в консоли есть ошибки? Можете ли вы подтвердить, что все необходимые операторы rx были импортированы?   -  person Sergey Karavaev    schedule 03.08.2017
comment
Согласовано. Код выглядит нормально. Это просто нормальный Rx, не зависящий от redux-observable или ngrx :)   -  person jayphelps    schedule 03.08.2017


Ответы (1)


Код выглядит нормально. Это просто нормальный Rx, не зависящий от redux-observable или ngrx (за исключением оператора ofType, но он идентичен в обеих библиотеках)

Вот он, работает:

https://jsbin.com/nosabuy/edit?js,output

В вашем приложении должна быть проблема где-то еще. Проверьте консоль на наличие ошибок, но если вы их не видите, вы можете попробовать использовать «Приостановить при обнаружении исключений» в Chrome, чтобы узнать, не проглатывает ли кто-то ошибку незаметно. Есть выдающаяся ошибка RxJS, когда сам Rx может проглатывать ошибки, а в случае наблюдаемого redux он может повлиять на вас, если в ваших редукторах есть ошибка: https://github.com/redux-observable/redux-observable/issues/263. Тем не менее, я предостерегаю вас не сразу предполагать, что вас укусила эта ошибка. Ваш отладчик - ваш лучший друг здесь, чтобы узнать, что происходит.


Этот раздел предназначен только для обхода проверки stackoverflow, которая не позволит мне отправить ссылку jsbin без кода

// ignore this
person jayphelps    schedule 02.08.2017
comment
Я вообще не получаю никаких ошибок в консоли, а пауза при обнаружении исключений ничего не вызывает, поэтому кажется, что никакой ошибки не возникает. Я пробовал использовать операторы таймера и задержки (и импортировать их), проблема та же. Единственный поддерживаемый вывод, похоже, возвращает один Observable через Observable.of. Я на самом деле использую React Native, может быть, эти операторы не поддерживаются? - person Bruno D'Auria; 03.08.2017
comment
Хорошо, я разобрался. Я отлаживал эмулятор Android, и все, что мне нужно было сделать, это ... перезапустить эмулятор, и он работал нормально. Мобильный разработчик иногда сводит меня с ума. Большое спасибо за ответ! - person Bruno D'Auria; 03.08.2017