У меня есть thunk, использующий Axios, который отправляет на экспресс-маршрут с использованием Sequelize.
Маршрут отправляется правильно (т. Е. Данные добавляются в БД), но действие внутри компонента React не выполняется 'ведет себя как ожидалось.Используя async/await
, я ожидаю, что действие подождет, пока оно не завершит запись базы данных, прежде чем продолжить, но здесь это не так.Я получаю undefined
от действия.
Группа отправляет действие по экспресс-маршруту, где я отправляю действие, чтобы обновить свое хранилище редуксов и возвращаю ответ:
const addedNewList = (newList) => ({type: ADD_NEW_LIST, newList})
export const addNewList = (name, userId) => async dispatch => {
try {
const { data } = await axios.post('/api/list/add', { name, userId })
dispatch(addedNewList(data))
return data
} catch (err) {
console.error(err)
}
}
Использованиеотладчик, я могу подтвердить, что return data
фактически возвращает ответ от сервера, который мне нужен.Я также могу подтвердить, что магазин приставок обновляется корректно.
Но здесь, когда я пытаюсь получить доступ к данным ответа как result
, я получаю undefined
:
handleSubmit = async () => {
const result = await this.props.addNewList(this.state.name, this.props.userId)
// ** result is 'undefined' **
this.handleClose()
// pass off the results
}
Если я добавлю setTimeout
после того, как вызову addNewList
действие, оно работает, как ожидалось.Это говорит мне о том, что, возможно, это не возвращает обещание?Но я понимаю, что если вы вернете ответ от сервера в thunk, он сделает это.
Для полноты, вот мой маршрут, который я также подтвердил с помощью отладчика, что данные передаются, как ожидалось:
const userAuth = function(req, res, next) {
if (req.isAuthenticated()) {
return next()
}
res.status(401).send('Unauthorized user')
}
router.post('/add', userAuth, async (req, res, next) => {
const { name, userId } = req.body
try {
const list = await List.create({ name, userId })
res.json(list)
} catch(err) { next(err) }
})
Почему действие возвращает undefined
в методе handleSubmit
?