Создатель действий - это подходящее место для последовательной отправки действий.Документация охватывает это :
Использование асинхронного промежуточного программного обеспечения, такого как Redux Thunk, безусловно, позволяет такие сценарии, как отправка нескольких отдельных, но связанных действий подряд, диспетчеризация действий для представления последовательности AJAXзапрашивать, отправлять действия, условно основанные на состоянии, или даже отправлять действие и сразу после этого проверять обновленное состояние.
В случае, если информацию о пользователе и действия версии необходимо проверять отдельно (они должны находиться в разныхмодули) или использоваться отдельно, создатели действий могут быть объединены.Это требует возврата обещаний, чтобы связать их.Это также показывает ограничение redux-thunk
:
function getUserInformation() {
return async (dispatch) => {
try {
dispatch(
{type: GET_USER_SUCCESS, response: await getUser()}
)
} catch (error) {
dispatch(
{type: GET_USER_FAILURE, response: error}
)
}
};
}
...
function getVersion() {
return async (dispatch) => {...};
}
...
function getInitialData() {
return async (dispatch, getState) => {
await getUserInformation()(dispatch);
// we need to use getState to check if there was an error
// because getUserInformation returns a fulfilled promise any way
await getVersion()(dispatch);
};
}
Было бы целесообразно повторно выдать ошибку из getUserInformation
, но было бы плохо, если бы она использовалась отдельно от getInitialData
, потому чтоэто приведет к необработанному отказу.Альтернатива еще хуже - проверить, не было ли ошибки с getState()
.
. В этом сценарии требуется более сложное промежуточное программное обеспечение, чем redux-thunk
, что очень просто - возможно, пользовательское промежуточное ПОэто основано на этом и способно обработать отклонения.