redux-thunk повторяет действие redux-api-middlware до тех пор, пока не будет установлен тайм-аут или переменная состояния

У меня есть конечная точка, которую можно опросить с помощью запроса GET, и она возвращается, если задача завершена.
{"status":"running"}
или
{"status":"completed"}
Я использую redux-api-middleware для создания действий, которые делают вызов API.

export const TASK_REQUEST = '@@unshorten/TASK_REQUEST';
export const TASK_SUCCESS = '@@unshorten/TASK_SUCCESS';
export const TASK_FAILURE = '@@unshorten/TASK_FAILURE';


export const check_task = (hash) => ({
 [RSAA]: {
    endpoint: '/api/task_status/'+hash+'/',
      method: 'GET',
      headers: withAuth({ 'Content-Type': 'application/json' }), 
      types: [
        {   
          type:RASTERIZE_REQUEST, 
          meta:{hash:hash}
        },  
        {   
          type:RASTERIZE_SUCCESS, 
          meta:{hash:hash}
        },  
        {   
          type:RASTERIZE_FAILURE, 
          meta:{hash:hash}
        },  
      ]   
  }

})

Мне нужно продолжать вызывать это действие и ждать 20 секунд между вызовами, пока конечная точка не вернет {"status":"completed"} или не будет достигнут максимальный тайм-аут, скажем, 120 секунд.

Мое предлагаемое решение - использовать преобразователь redux с асинхронным ожиданием в течение 20 секунд, который повторно вызывает вышеуказанное действие, пока не будет завершен возвращенный статус или не будет достигнут тайм-аут.

Мне понадобится такой магазин для вышеупомянутой части:

{
initial_call_time:1,
last_call_time:12,
status:'running'
}

Таким образом, я мог проверить переменные хранилища при следующих нескольких вызовах, чтобы узнать, истекло ли время или статус завершен.

Есть ли лучшее решение для этого варианта использования?


person user249806    schedule 29.07.2019    source источник


Ответы (1)


Redux Saga - лучший фреймворк для опросов, который я нашел. Вот хороший учебник, который точно описывает ситуацию, которую я пытаюсь решить.

https://levelup.gitconnected.com/keep-calm-and-race-on-redux-saga-case-study-2f5b0a6630ae

person user249806    schedule 31.07.2019