【发布时间】:2019-05-04 04:23:07
【问题描述】:
我有一个使用 redux 的异步函数,它调用 API 并从服务器返回响应:
function xyz() {
return async (dispatch, getState) => {
const { user: { token } } = getState();
return axios.get(API_URL, {
headers: {
Accept: "application/json",
"Content-Type": "application/json",
'jwt': token
}
})
.then(response => {
console.log(response.data.data);
return response.data.data;
})
.catch(function(error) {
console.log('error: ' + error.message);
});
};
}
mapDispatchToProps 函数定义如下:
const mapDispatchToProps = (dispatch, ownProps) => {
return {
xyz: () => {
dispatch(actions.xyz());
}
};
};
export default connect(null, mapDispatchToProps)(Container);
我正在尝试从以下函数调用函数 xyz:
abc = async () => {
const { xyz } = this.props;
const result = await xyz();
console.log(result);
}
当按下按钮时触发:
<TouchableOpacity onPressOut={this.abc}>
我看到函数 abc 中的 console.log 打印未定义,而 xyz 中的 console.log(result.data.data) 打印预期结果。我哪里错了?
解决方案
错误出现在 mapDispatchToProps 函数中,该函数缺少返回值。这是正确的实现:
const mapDispatchToProps = (dispatch, ownProps) => {
return {
xyz: () => {
return dispatch(actions.xyz());
}
};
};
export default connect(null, mapDispatchToProps)(Container);
【问题讨论】:
-
您确定 await xyz() 调用返回未定义吗?似乎它应该返回一个承诺(axios.get)。
-
是的,当然。真的很奇怪
标签: react-native redux async-await