Redux - это библиотека, которая работает реактивно, поэтому она ожидает отправки действий, чтобы распространить изменения состояния на все подключенные функции.
Если для отправки действия установлен тайм-аут на 5 секунддля Redux это так же, как если бы вы подождали 5 секунд в реальной жизни, а затем позвонили dispatch()
. Он просто ответит на это действие обновлением всех подключенных функций.
Ваш вопрос больше об обещаниях.
Есть ли вероятность, что fetchedUser не имеетобновляется еще во время выполнения отправки (getUser (userId)). затем?
Нет, потому что вы используете .then
после действия getUser, и это гарантирует, что обещание fetchUser уже было разрешено,Может случиться так, что пользователь не был найден или что-то в этом роде, но в этом блоке вы можете убедиться, что вызов fetchUser уже завершен.
Поток будет выглядеть так:
- Вызов getUser (userId)
- Отправка GET_USER_REQUEST
- Вызов fetchUser ()
- Дождаться завершения fetchUser.
- Отправка GET_USER_SUCCESS
- Выполнить
fetchedUser = getState().usersById[userId]
- И так далее ..
Что произойдет, если я напишу setTimeout (() => {dispatch ({type: 'GET_USER_SUCCESS' ', id, response})}, 5000) в fetchUser.then
В этом случае может запустить строку назначения fetchedUser без обновления состояния, так как я предполагаю, чтозадает пользователю действие GET_USER_SUCCESS
, верно? Таким образом, если запрос занимает менее 5 секунд, он выполнит присвоение перед обновлением состояния с пользовательскими данными.