【问题标题】:Async await or .then() are returning undefined for redux actions异步等待或 .then() 为 redux 操作返回 undefined
【发布时间】:2019-08-05 08:02:06
【问题描述】:

我正在这样做:await dispatch(myfunction(arg1)) 如果我添加 .then()

const x = await dispatch(myfunction(arg1)) 
console.log(x)

两者都以未定义的形式返回...

但是当我在浏览器中查看响应时,我得到了我期望的数据

有什么想法吗?

动作创建者只是通过一些中间件并调用一些动作,但不知道为什么它是未定义的

【问题讨论】:

  • dispatch 不会返回任何东西,它只会去更新 redux 存储,然后将反映在订阅此存储的组件中。
  • 为什么需要等待这个样本?也许,我们需要更多关于你想做什么的信息
  • 好吧,我需要更新后的状态才能基于它执行某些操作......但是当我登录 getState().myObject 它返回 {} 但它应该像浏览器中的响应一样填充://
  • @ShubhamKhatri 我认为dispatch 是同步的,那么为什么我在调度后调用getState() 时会得到不正确的状态?
  • 您应该使用中间件或 thunk 来执行网络调用。这会让你也等待他们

标签: javascript reactjs redux dispatch


【解决方案1】:

Dispatch 不返回承诺。它只是触发更新发生。 如果您需要使用 Promise,请考虑使用 redux-thunk,然后执行以下操作:

let thunkAction = async (args1) => {
   let res = await myFunction(args1);
   dispatch(someUpdate(res));
}

【讨论】:

  • 我正在使用 redux thunk。那么我需要更改我的动作创建者吗?
【解决方案2】:

您可以将redux-thunk 模块添加到您的项目中。如果您从您的操作返回 dispatch 函数,此模块允许通过返回一个承诺来连接调度操作,例如:

// I normally use action creator
const myAction = (args) => dispatch => {
return dispatch({ type: 'MY_ACTION', payload: args });
}

所以你可以连接:

const applyActions = () => {
myAction('test').then(() => {});
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-04-18
    • 2021-05-26
    • 1970-01-01
    • 2016-10-24
    • 2017-03-21
    • 2020-03-13
    • 2021-11-01
    • 1970-01-01
    相关资源
    最近更新 更多