Мы с коллегой добавили в наше приложение для Android поток, наблюдаемый за сокращением, и не можем понять, как создать эпик, который перестает получать действия до тех пор, пока не завершится первый вызов.
Первоначально я думал, что мы можем использовать skipUntil()
, но потом понял, что результат skipUntil()
проглатывается и никогда не передается остальной части цепочки.
Ниже приведен примерный JS-код, показывающий, чего мы надеемся достичь.
const fetchUserEpic = action$ =>
action$.ofType(FETCH_USER)
.skipUntil( /* first request completes */ )
.mergeMap(action =>
ajax.getJSON(`/api/users/${action.payload}`)
.map(response => fetchUserFulfilled(response))
.takeUntil(action$.ofType(FETCH_USER_CANCELLED))
);
Это почти похоже на то, что мне нужен оператор skipMap()
, который действует как switchMap()
, но учитывает только один запрос за раз, игнорируя все элементы, если наблюдаемое выполняется.
Спасибо за любые предложения.