Многократная отправка в componentDidMount - PullRequest
0 голосов
/ 20 ноября 2018

Я хочу сделать несколько запросов в componentdidmount прямо сейчас, это то, что я делаю,

componentDidMount() {
   const {
     getVehicleGroup,
     getDrivers,
     getFuelTypes,
     getUnassignedDevices,
     getCarMake
   } = this.props;
   getVehicleGroup();
   getDrivers();
   getFuelTypes();
   getUnassignedDevices();
   getCarMake();
}

и сага связана со всеми этими действиями.Теперь я хочу запустить другую функцию, но только при этих запросах.Это то, что я ищу

Promise.all([getVehicleGroup, getDrivers, getFuelTypes, getUnassignedDevices, getCarMake])
 .then(anotherFunction)

Вот моя карта Диспетчер

const mapDispatchToProps = (dispatch) => ({
 getVehicleGroup: () => dispatch(vehicleGroupRequest()),
 getDrivers: () => dispatch(driverRequest()),
 getFuelTypes: () => dispatch(fuelTypeRequest()),
 getCarMake: () => dispatch(carMakeRequest()),
 getUnassignedDevices: () => dispatch(unassignedDevicesRequest()),
 updateCurrentDriver: () => dispatch(change('addVehicleForm', 'FK_driver_id', [])),
 onSubmitForm: () => dispatch(addVehicleRequest())
});

Ответы [ 2 ]

0 голосов
/ 22 ноября 2018

ИМХО два наиболее "аккуратных" способа:

  • с чистыми сагами: вы отправляете еще одно действие, чтобы запустить сагу, которая take всех действий, которые вы хотите подождать дозапуск anotherFunction (но, в зависимости от того, что вы хотите сделать с anotherFunction, это может быть бесполезно)

  • вы можете использовать redux-saga-thunk получить обещание от каждой саги, которую вы начинаете, и получить все преимущества redux-thunk.Я не использовал это непосредственно, но я сделаю, как только мне нужно будет сделать что-то подобное

0 голосов
/ 20 ноября 2018

Хотя я в основном использую Redux Thunk, я думаю, что это должно быть похоже в вашем случаеПопробуйте сделать следующее в вашей функции mapDispatch:

 getVehicleGroup: () => async dispatch(vehicleGroupRequest())

Асинхронные функции переносятся как обещания и ведут себя в основном одинаково, позволяя вам сделать что-то вроде: Promise.All([]).then(nextAction)

...