2016-12-13 3 views
1

я следующий код, который отправки 3 действия:RxJS Наблюдаемые называют в обратном порядке

  • deleteLineFailed
  • showConfirmationMessage
  • Wait 2s
  • hideConfirmationMessage

По некоторым причинам, единственный способ, которым я смог заставить его работать, - в обратном порядке, что я делаю неправильно?

const deleteLineEpic = (action$, store) => 
action$.ofType(types.DELETE_LINE_REQUEST) 
    .flatMap((action) => { 
     return Observable.of(hideConfirmationMessage(action.line.productID)) 
       .delay(2000) 
       .merge(
        Observable.of(deleteLineFailure(action.line.productID)), 
        Observable.of(showConfirmationMessage(action.line.productID)) 
       ); 
     } 
    }); 

ответ

2

Я думаю, что происходит следующее:

deleteLine  -----X------------ 
showConfirmation -------Y---------- 
hideConfirmation --------- 2s -----Z 

merge    -----X-Y- 2s -----Z 

Все 3 потоки сливаются, и один с задержкой излучает через две секунды, а другой тут же испускать действие.

Так что может быть лучше, чтобы сделать это:

const deleteLineEpic = (action$, store) => 
action$.ofType(types.DELETE_LINE_REQUEST) 
    .flatMap((action) => { 
     return Observable.merge(
      Observable.of(deleteLineFailure(action.line.productID), 
      showConfirmationMessage(action.line.productID)), 
      Observable.of(hideConfirmationMessage(action.line.productID)) 
       .delay(2000) 
     )} 
); 

Здесь действия в первом Observable.of получить сразу испускается после друг друга, в то время как скрыть действия излучается позже.

Смежные вопросы