0

我正在使用 v2.2.2 的 redux-loop 来处理来自服务器调用的副作用。

从我的组件中分派了一个动作,如下所示:

checkStatus() {
    const user = Utils.toJS(this.props.user);
    this.props.dispatch(UserActions.getUserData(user._id))
    .then((res) => {
        console.log(res)
    }
}

我希望我的承诺会从调度中回来,但它总是会回来

[]

我的动作看起来像这样...

export async function getUserData(data) {
return await getUser(data)
    .then((res) => ({type: USER_GET_SUCCESS, payload: res}))
    .catch((err) => ({type: USER_GET_FAILURE, payload: err}));
}

其中 getUser 看起来像:

export async function getUser(data) {
    return await get(`/users/${data}`)
}

并被减速器捕获并保存到如下状态:

case USER_GET_SUCCESS:
  return state
  .set('user', fromJS(action.payload.data));

数据总是会正确返回,但由于某种原因永远不会作为对原始调度的承诺而返回。

任何建议都会很棒!

4

1 回答 1

1

我认为问题的一部分是将您的承诺.then代码与单个函数中的 async/await 调用混合在一起。试试这个:

export async function getUserData(data) {
  try {
    const result = await getUser(data);
    return { type: USER_GET_SUCCESS, payload: result };
  } catch (err) {
    return {type: USER_GET_FAILURE, payload: err};
  }
}
于 2017-08-09T13:20:12.777 回答