javascript - 一个接一个地响应执行动作调用不起作用
问题描述
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。
解决方案
您在操作中发送的有效负载是一个 Promise。请查看Redux 文档,
动作是一个普通的 JavaScript 对象
这意味着您不应该在您的操作中发送任何承诺或其他功能。Promise 应该在 redux 操作和 reducer 之外的其他地方开始和结束。
获取数据的常用方法是通过 Redux 中间件。命名一个中间件 - redux-thunk。您绝对可以避免使用中间件并自己编写所有内容,这取决于您。但是你应该在你的应用程序中改变一件事——停止在动作的有效负载中发送一个承诺。
推荐阅读
- postgresql - 未记录表上的 WALWriteLock
- express - 如何集成localtunnel和sendgrid测试集成webhook?
- ios - 我在 xcode 9.4 中找不到 .entitlements 文件
- jenkins - 无法在 groovy DSL 中拆分字符串并且没有多行
- javascript - CSV 到 JavaScript 对象 node.js 的日期解析问题 - 零被丢弃
- java - Java While Advance x 循环
- php - 如何在 URL 中附加 1 个以上的可选查询参数,然后根据这 2 个参数获取记录?
- symfony - 安装已由另一个依赖项安装的依赖项
- json - 在 NodeJS 中搜索 JSON 对象
- php - PHP - 有异常的切换案例