RXjs, цепочка длинных запросов на опрос - PullRequest
1 голос
/ 01 апреля 2019

У меня есть следующее 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})
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...