action.js
export function getLoginStatus() { return async(dispatch) => { let token = await getOAuthToken(); let success = await verifyToken(token); if (success == true) { dispatch(loginStatus(success)); } else { console.log("Success: False"); console.log("Token mismatch"); } return success; } }
component.js
componentDidMount() { this.props.dispatch(splashAction.getLoginStatus()) .then((success) => { if (success == true) { Actions.counter() } else { console.log("Login not successfull"); } }); }
但是,当我使用 async/await 编写如下所示的 component.js 代码时,出现此错误:
Possible Unhandled Promise Rejection (id: 0): undefined is not a function (evaluating 'this.props.dispatch(splashAction.getLoginStatus())')
async componentDidMount() { let success = await this.props.dispatch(splashAction.getLoginStatus()); if (success == true) { Actions.counter() } else { console.log("Login not successfull"); } }
我如何等待 getLoginStatus() 然后执行其余语句?使用 .then() 时一切都运行良好。我怀疑我的 async/await 实现中缺少了某些东西。试图弄清楚。
要使用async/awaitin `componentDidMount并正确处理已分派的操作,必须确保正确管理操作及其承诺解决方案。您遇到的错误通常表示this.props.dispatch未正确绑定或操作本身未按预期返回承诺。
async/await
`componentDidMount
this.props.dispatch
以下是对您的实现的一种改进方法,可确保操作创建者和组件的使用都得到正确的协调:
确保getLoginStatus返回一个承诺,并且dispatch(loginStatus(success))后面跟着一个返回语句。
getLoginStatus
dispatch(loginStatus(success))
export function getLoginStatus() { return async (dispatch) => { let token = await getOAuthToken(); let success = await verifyToken(token); if (success === true) { dispatch(loginStatus(success)); } else { console.log("Success: False"); console.log("Token mismatch"); } return success; }; }
确保this.props.dispatch正确使用并且getLoginStatus正确等待。
import React from 'react'; import { connect } from 'react-redux'; import splashAction from './actions'; // Adjust the import path as needed import { Actions } from 'react-native-router-flux'; class MyComponent extends React.Component { async componentDidMount() { try { let success = await this.props.dispatch(splashAction.getLoginStatus()); if (success === true) { Actions.counter(); } else { console.log("Login not successful"); } } catch (error) { console.error("An error occurred:", error); } } render() { return ( <div> {/* Your component's render logic */} </div> ); } } // Assuming mapStateToProps and mapDispatchToProps are defined if needed export default connect()(MyComponent);
async
dispatch
connect
await
===
通过遵循这些步骤,您应该能够正确地等待getLoginStatus操作并处理其结果componentDidMount。
componentDidMount