reactjs - 异步/等待 redux thunk 未正确返回操作 promise

标签 reactjs express redux sequelize.js

我有一个使用 Axios 的 thunk,它使用 Sequelize 发布到 Express 路由。

路由正确发布(即数据被添加到数据库中),但 React 组件内部的操作未按预期运行。使用 async/await ,我希望该操作在继续之前等待它完成数据库发布,但情况并非如此。我从 Action 中得到 undefined

thunk 击中了我正在调度操作以更新我的 redux 存储并返回响应的快速路由:

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 实际上正在从我需要的服务器返回响应。我还可以确认 redux 商店正在正确更新。

但是在这里,当我尝试将响应数据作为 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,它会按预期工作。这向我表明,也许它没有返回 promise ?但我的理解是,如果您在 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方法中的action会返回handleSubmit

最佳答案

尝试返回 dispatchaddedNewList(data) 代替:

export const addNewList = (name, userId) => async dispatch => {
  try {
    const { data } = await axios.post('/api/list/add', { name, userId })
    return Promise.resolve(dispatch(addedNewList(data)));
  } catch (err) {
    console.error(err)
  }
}

话虽如此,您可以考虑重构组件以使用 mapStateToProps 来使用更新的 Redux 存储中的值/result,而不是显式等待响应并手动传递值?

关于reactjs - 异步/等待 redux thunk 未正确返回操作 promise ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53324932/

相关文章:

javascript - findOneAndRemove 和 findOneAndUpdate 未按预期工作

javascript - 你如何使用mongodb native、express和body-parser来发布请求和保存数据?

javascript - 检查 Javascript 对象的每个键中的特定值

javascript - 为什么钩子(Hook)中的函数依赖不会导致无限渲染

javascript - 如何使用 MUI React 左对齐 Item1 并右对齐 Item2 和 Item3?

node.js - 在WebStorm IDE中添加库文件

reactjs - rxjs 中的嵌套和扁平化有什么区别?

javascript - 如何在react-redux中等待特定的prop更改

javascript - 一键从 redux 存储中添加/删除对象

javascript - 在 Redux 中清除数组状态