为了账号安全,请及时绑定邮箱和手机立即绑定

如何从 redux 获取承诺的状态?

如何从 redux 获取承诺的状态?

郎朗坤 2023-04-27 16:49:54
我在我的本机反应应用程序中使用 redux。为了更新一些配置文件数据,我在我的一个组件中调度了一个动作 updateProfile(data)在我的组件中values = { // some Js object values }updateProfile(values)在行动创造者export const updateProfile = (details) =>(dispatch) => {dispatch(profileLoading()) axios.post(SERVERURL,details)  //updating the details to the server  .then((result)=>{                    dispatch(addProfile(result.data[0]))   //updating the returned details to redux state      })  .catch((err)=>{        dispatch(profileFailed(err.response))      })    }) }export const profileLoading = () => ({    type: ActionTypes.PROFILE_LOADING,})export const addProfile = (profile) => ({    type: ActionTypes.ADD_PROFILE,    payload: profile})export const profileFailed = (err) => ({    type: ActionTypes.PROFILE_FAILED,    payload: err})配置文件.jsimport * as ActionTypes from './ActionTypes'export const profiles = (state = {isLoading:true,errMess:null,profiles:{ }},action) =>{    switch(action.type){        case ActionTypes.ADD_PROFILE:            return {...state, isLoading:false, errMess:null, profiles: action.payload}                case ActionTypes.PROFILE_LOADING:            return {...state, isLoading:true,errMess:null}                case ActionTypes.PROFILE_FAILED:            return {...state, isLoading:false,errMess:action.payload, profiles: {}}        case ActionTypes.DELETE_PROFILE:            return {...state,isLoading:false,errMess:null,profiles:{}}        default:            return state        }           }在这一行updateProfile(values)之后,目前正在使用如下所示的 setTimeout 来了解更新的结果updateProfile(values)setTimeout(()=>{    if(profiles.errMess==null){        setCondition('completed')        nav.navigate('some Screen')    }    else{        setCondition('error')        }},3000)因为我需要导航到其他屏幕,所以我不能使用 SetTimeOut,因为它会不断地产生延迟,即使更新很快完成,如果更新时间超过 3 秒,它仍然会引起头痛。我想要的是,仅当数据更新到服务器时导航到“某个屏幕”(如承诺)是的,我可以更新 redux 状态中的状态值,但我需要在组件级别实现它。我是 redux 的新手。请有人帮助我。
查看完整描述

1 回答

?
子衿沉夜

TA贡献1828条经验 获得超3个赞

我相信您可以返回 axios 请求以访问您调用它的承诺。

// Action Creator

export const updateProfile = (details) =>(dispatch) => {

  dispatch(profileLoading())


  return axios.post(SERVERURL,details)

    .then((result) => {            

      dispatch(addProfile(result.data[0]))

    }).catch((err) => {

      dispatch(profileFailed(err.response))

    })

  })

}



// Usage

dispatch(updateProfile(values)).then((response) => {

  // handle successful response

}).catch((err) => {

  // handle failure

})


查看完整回答
反对 回复 2023-04-27
  • 1 回答
  • 0 关注
  • 99 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信