【问题标题】:Actions must be plain objects. Use custom middleware for async actions- React Native Redux动作必须是普通对象。使用自定义中间件进行异步操作 - React Native Redux
【发布时间】:2019-01-05 21:39:06
【问题描述】:

一些背景知识:当我使用简单的 .then() 链接获取和调度响应时,我能够让一切正常工作。我现在得到的错误是当我试图使我的操作异步,并在承诺上使用 await 时。

注意:我正在使用 redux thunk。

actions.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 (params) 中删除async
  • 您能否提供与您的商店对象相关的代码?可能是设置问题导致此问题
  • 是的,我刚试过,它有效!

标签: javascript reactjs react-native redux redux-thunk


【解决方案1】:

async 关键字将确保返回一个承诺,并且您不想返回一个承诺而是一个函数。

从第一个函数中删除 async 关键字,它将按预期工作。

export const onLoginPressed = (params) => async (dispatch) => {
  // ...
}

【讨论】:

    猜你喜欢
    • 2018-11-12
    • 2018-01-31
    • 2018-03-27
    • 2018-02-19
    • 2019-06-17
    • 2020-02-20
    • 2018-09-14
    • 2020-01-06
    • 2021-11-04
    相关资源
    最近更新 更多