javascript - 动作必须是普通对象。使用自定义中间件进行异步操作 - React Native Redux
问题描述
一些背景知识:当我使用简单的 .then() 链接获取和调度响应时,我能够让一切正常工作。我现在得到的错误是当我试图使我的动作异步,并在 promises 上使用 await 时。
注意:我使用的是 redux thunk。
动作.js:
export const onLoginPressed = async (params) => async (dispatch) => {
try {
const loginResp = await fetch("http://localhost:8000/api-token-auth/", {
method: 'POST',
headers: {
'Content-Type': 'application/json',
},
body: JSON.stringify(params)
})
let res = await loginResp.text();
if (response.status >= 200 && response.status < 300) {
let accessToken = res;
dispatch(storeToken(accessToken));
} else {
let error = res;
dispatch(failToken())
throw error;
}
} catch (e) {
console.log(e)
}
}
export const failToken = () => {
return {
type: FAIL_TOKEN
}
}
export const storeToken = (token) => {
return {
type: CREATE_TOKEN,
token: token
}
}
解决方案
该async
关键字将确保返回一个承诺,并且您不想返回一个承诺而是一个函数。
从第一个函数中删除async
关键字,它将按预期工作。
export const onLoginPressed = (params) => async (dispatch) => {
// ...
}
推荐阅读
- reactjs - remove 0 from redux-form-input-masks
- javascript - Node js HTTPS get request for Instagram post information (?__a=1) request returning 301 status code in Vercel
- javascript - 如何在 div 中创建 div?
- facebook - How can I capture a URL from Chrome Custom Tabs without clicks?
- react-native - VirtualizedList:您有一个更新缓慢的大列表 - React Native FlatList
- java - 是否可以递归检查java数组中所有组合的最大值
- swift - 如何以表单数据格式将数据传递给服务器?我正在尝试发送以下 JSON 数据。我正在使用 Alamofire
- r - 如何使用 R 绘制世界地图
- php - Doctrine 查询语言每组的最新行
- javascript - 使用 javascript 替换 DOCX 中的合并字段