Независимая отмена цепочки в избыточно-наблюдаемом?

Я новичок в RxJS. В моем приложении мне нужна независимая отмена отложенного действия. Вот рабочий пример (задержка 3 секунды). Но когда я выбираю удалить несколько элементов и отменить один из них, то отменяются все сразу.

Эпический код:

const itemsEpic = action$ =>
  action$.ofType('WILL_DELETE')
    .flatMap(action =>
      Observable.of({type: 'DELETE', id: action.id})
        .delay(3000)
        .takeUntil(action$.ofType('UNDO_DELETE'))
  )

Я думаю, мне нужно передать оператор id в takeUntil, но я не знаю, как это сделать.


person Andy Pro    schedule 31.01.2017    source источник


Ответы (1)


Если я правильно понимаю оператор takeUntil, он перестает выдавать новые элементы из Observable, для которого он был вызван, как только аргумент Observable выдает свой первый элемент. Имея это в виду, вы можете сделать что-то вроде этого:

const itemsEpic = action$ => action$.ofType('WILL_DELETE')
  .flatMap(action => Observable.of({ type: 'DELETE', id: action.id })
    .delay(3000)
    .takeUntil(action$.ofType('UNDO_DELETE').filter(({id}) => id === action.id))
  )
person Balázs Édes    schedule 31.01.2017
comment
Вы, кажется, прекрасно это понимаете. Это именно то, что вы бы сделали. - person jayphelps; 01.02.2017
comment
Это решение работает именно так, как ожидалось. Большое спасибо. - person Andy Pro; 01.02.2017