首页 > 解决方案 > 一个接一个地响应执行动作调用不起作用

问题描述

export function updateSchools(subjectId, schoolId, data) {
const { year } = data
  return {
    type: actionTypes.UPDATE_SCHOOL,
    meta: actionTypes.UPDATE_SCHOOL,
    payload: http.put(
      `api/school/${schoolId}`,
      data
    ).then(data => {
      return _getSchools(subjectId, year)
    })
  }
}


const _getSchools = (subjectId, year) => {
  return http.get(`api/school/${subjectId}/subject/${year}`).then(data => {
    //some logic
    
    return data
  })
}

调用操作updateSchools函数后,更新的值不会作为_getSchools响应返回。当页面重新加载时,更新的值被返回,甚至在updateSchools函数中调试,在数据库中的值被更新。谁能告诉我我错在哪里?应用程序中使用了 Promise 和 react-redux。

标签: javascriptreactjsreduxpromise

解决方案


您在操作中发送的有效负载是一个 Promise。请查看Redux 文档

动作是一个普通的 JavaScript 对象

这意味着您不应该在您的操作中发送任何承诺或其他功能。Promise 应该在 redux 操作和 reducer 之外的其他地方开始和结束。

获取数据的常用方法是通过 Redux 中间件。命名一个中间件 - redux-thunk。您绝对可以避免使用中间件并自己编写所有内容,这取决于您。但是你应该在你的应用程序中改变一件事——停止在动作的有效负载中发送一个承诺。


推荐阅读