如何一个接一个地调度两个异步 redux 动作?

Posted

技术标签:

【中文标题】如何一个接一个地调度两个异步 redux 动作?【英文标题】:How to dispatch two async redux action one after another? 【发布时间】:2020-07-17 05:56:34 【问题描述】:

在我的 componentDidMount 中,我分派了两个动作创建者,即 thunk 都一个接一个地调用。第一次 dispatch 的 api 调用中获取的结果将作为第二次 dispatch 的 api 调用中的参数。我如何做到这一点,以便我的第二个调度调用始终从第一个 api 调用中获取更新的结果值。此外,我不能在第一个动作创建者中调用我的第二个调度,因为它们都需要分开以实现可重用性。抱歉,如果已经提出问题,我只是在为我的用例寻找完美的解决方案。

componentDidMount() 
  const  setLeadTypesAsync ,setRadarLeadsAsync  = this.props;
  setLeadTypesAsync(); //first dispatch
  setRadarLeadsAsync();  //second dispatch


//First dispatch call
export const setLeadTypesAsync = () => 
 return (dispatch) => 
 dispatch(setLeadTypesStart());
 fetchLeadTypes()  //Api service
  .then(( data:  message, types  ) => 
    if(types) 
      dispatch(setLeadTypesSuccess(types)); //Setting a state called leadTypes
    
    else 
      dispatch(setLeadTypesError(message));
    
 )
;

//Second dispatch call
export const setRadarLeadsAsync = () => 
 return (dispatch, getState) => 
 dispatch(setRadarLeadsStart());
 const  leadTypes  = getState().leads
 console.log(leadTypes);    //Getting the initial value [] instead of updated value
 fetchRadarLeads(leadTypes).then(data =>    //Api service
   console.log(data)
 )
;

【问题讨论】:

这能回答你的问题吗? chaining async method calls - javascript 不,我不是在寻找基于承诺的解决方案 【参考方案1】:

这正是async/await 发挥作用的那种情况。 像这样..

async componentDidMount() 
  const  setLeadTypesAsync ,setRadarLeadsAsync  = this.props;
  const res = await setLeadTypesAsync(); //first dispatch
  setRadarLeadsAsync(res);  //second dispatch

【讨论】:

以上是关于如何一个接一个地调度两个异步 redux 动作?的主要内容,如果未能解决你的问题,请参考以下文章

如何响应 redux 中的状态变化并派发另一个动作?

调用两个异步操作的正确方法

Redux thunk - 错误 · 动作必须是普通对象。使用自定义中间件进行异步操作,即使调度具有键类型的对象

从 redux-observable 的史诗有条件地调度额外的动作

在 redux 中在哪里调度多个操作?

在redux和redux thunk中使用异步调度传递参数