Потенциально, вы можете достичь этого с помощью windowToggle :
![windowToggle](https://i.stack.imgur.com/anFBJ.png)
В вашем случае "включено" равно REMOVE_USER_SUCCESS
и "выключено" равно REMOVE_USER_REQUEST
.
Итак, мы будем слушать GET_DEVICE_REQUEST
между REMOVE_USER_SUCCESS
и REMOVE_USER_REQUEST
.
Обратите внимание, что мы должны начать с нашего открытого фильтра, добавив startWith(void 0)
к включенному потоку.
например:.
const getDeviceEpic = action$ => action$.pipe(
ofType('GET_DEVICE_REQUEST'),
windowToggle(
action$.pipe(ofType('REMOVE_USER_SUCCESS'), startWith(void 0)),
()=>action$.pipe(ofType('REMOVE_USER_REQUEST')
),
mergeMap(() => from(service...).pipe(
mapTo({ type: 'GET_DEVICE_SUCCESS' }))
))
const removeUser = action$ => action$.pipe(
ofType('REMOVE_USER_REQUEST'),
mergeMap(() => from(service...).pipe(
mapTo({ type: 'REMOVE_USER_SUCCESS' }))
)
)
* предупреждение: записано в блокноте
Тем не менее, imho, также неплохо иметь флаг в магазине (возможно, в качестве индикации состояния).
Подробнее о приостановке и отключении потоков в моей статье " Pausable Observables в RxJS ".
-
Надеюсь, это поможет