У меня есть следующее RXjs construction
(в реагируемой наблюдаемой), которое связывает длинные запросы на опрос. Цель состоит в том, чтобы повторить запрос, если для него истекло время ожидания, или использовать содержимое request to 1
.) Обновления ui state 2
.) Начать новый цикл обновления, используя новый URI
из ответа.
Похоже, что приведенная ниже конструкция неправильно генерирует внутренние события или рассылает их спамом бесконечно при использовании mergeMap
вместо exhaustMap
. Что мне здесь не хватает?
action$.pipe(
ofType(actions.LONG_POLL_CHAIN),
exhaustMap(action =>
from(apiClient.longPoll(uri)).pipe(flatMap(response => concat(
of(actionLongPollingSuccess(response)),
of(actionLongPollingContinue(response)))
))
)
в псевдокоде ожидаемый результат должен быть:
while(true){
action = actions.deduplicate().takeFirst();
if(!apiClient.isLongPollingRunning())
{
result = apiClient.longPoll(action.uri)
actions.push({ uri: result.uri}
actions.push({ data: result.data}) //consumed by other service
}
else {
actions.push({ uri : uri})
}
}