Javascript 如何在redux中使用asyn操作

Javascript 如何在redux中使用asyn操作,javascript,react-redux,Javascript,React Redux,我想知道我的操作何时完成了请求,这样我就可以处理数据了(有点像承诺) 我正在使用thunk分派函数 这是我的行动 export function addUser(nom,url) { return (dispatch) =>{ axios.post('/', { nom: nom, url: url }) .then(function (response) {

我想知道我的操作何时完成了请求,这样我就可以处理数据了(有点像承诺)

我正在使用thunk分派函数

这是我的行动

export function addUser(nom,url) {
    return (dispatch) =>{

        axios.post('/', {
            nom: nom,
            url: url
        })
            .then(function (response) {
                dispatch(()=>{//somthing for the reducer})
                console.log(response);

            })
}
在我的组件中,我想执行类似的操作

addUser('test','test')
.then() // do something after the addUser is executed

我们在redux中这样做的方式是在成功时发送一个操作,如下所示:

const addUserSuccess = () => {
  return {
    type: 'ADD_USER_SUCCESS',
  }
}


export function addUser(nom,url) {
  return (dispatch) =>{

    axios.post('/', {
       nom: nom,
       url: url
    })
    .then(function (response) {
       dispatch(addUserSuccess());
       console.log(response);
     })
}
const initialState = { addedUser: false };

export default (state = initialState, action) => {
    switch (action.type) {
        case 'ADD_USER_SUCCESS:
            return {
                ...state,
                addedUser: true
            };
        default:
            return state;
    }
}
现在在你的减速机里变成这样:

const addUserSuccess = () => {
  return {
    type: 'ADD_USER_SUCCESS',
  }
}


export function addUser(nom,url) {
  return (dispatch) =>{

    axios.post('/', {
       nom: nom,
       url: url
    })
    .then(function (response) {
       dispatch(addUserSuccess());
       console.log(response);
     })
}
const initialState = { addedUser: false };

export default (state = initialState, action) => {
    switch (action.type) {
        case 'ADD_USER_SUCCESS:
            return {
                ...state,
                addedUser: true
            };
        default:
            return state;
    }
}
最后但并非最不重要的一点是,将组件连接到存储

class ExampleComponent extends React.Component {
  componentDidMount() {
    addUser();
  }

  render() {
    if (props.addedUser) {
      // do something after the addUser is executed
    }

    return <div>Example</div>;
  }
}

const mapStateToProps = (state) => ({
    addedUser: state.user.addedUser
});
// connect is a react-redux HOC
const ConnectedComponent = connect(mapStateToProps)(ExampleComponent);
然后您可以在组件中使用它

addUser()().then();

只需确保调用它两次,因为addUser()是一个返回承诺的函数。您始终可以创建一个承诺并从
addUser
返回它,然后在http请求完成时解析它。你试过什么了吗?我实际上试着回报一个新的承诺,但是因为我不太擅长承诺。。。我不知道如何解决它
promise.resolve()
?:DI收到此错误React Redux:操作必须是普通对象。将自定义中间件用于异步操作sthunk调度是异步的,这里有什么不起作用?这有帮助吗?还是需要更好的解释/示例?