У меня есть конечная точка, которую можно опросить с помощью запроса 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'
}
Таким образом, я мог проверить переменные хранилища при следующих нескольких вызовах, чтобы узнать, истекло ли время или статус завершен.
Есть ли лучшее решение для этого варианта использования?