代码之家  ›  专栏  ›  技术社区  ›  turisap

在redux thunk中调用另一个异步函数中的一个异步函数

  •  9
  • turisap  · 技术社区  · 7 年前

    我正在构建一个react应用程序,并使用redux thunk进行异步操作。我有两个功能 getActivities() createActivity() 在成功地调用了后者之后,我想调用前者。但如果我把 getActivities() 在…内 then 块,共块 createActivity() 它只是没有被调用(这可以通过没有看到我放入的console.log()来证明 getActivities() ). 以下是两个功能:

    export const getActivities = () => dispatch => {
    console.log('again');
    return axios.get(ENV.stravaAPI.athleteActivitiesBaseEndPoint, autHeaders)
        .then(resp => {
            dispatch({type: actions.GET_ACTIVITIES, activities: resp.data})
        })
        .catch(err => {
            if(window.DEBUG)console.log(err);
        })
    };
    
    export const createActivity = data => dispatch => {
    
    dispatch(setLoadingElement('activityForm'));
    return axios.post(URL, null, autHeaders)
        .then(resp => {
            if (resp.status === 201) {
                dispatch(emptyModal());
            }
            // I WANT TO CALL getActivities() HERE
            dispatch(unsetLoadingElement('activityForm'));
        })
        .catch(err => {
            if(window.DEBUG) console.log(err.response.data.errors);
            dispatch(unsetLoadingElement('activityForm'));
        });
    };
    

    我怎么能把一个叫做另一个?

    2 回复  |  直到 7 年前
        1
  •  9
  •   Shubham Khatri    7 年前

    为了从一个动作创建者内部调用另一个动作,您只需 dispatch 动作像 dispatch(getActivities())

    export const createActivity = data => dispatch => {
    
        dispatch(setLoadingElement('activityForm'));
        return axios.post(URL, null, autHeaders)
            .then(resp => {
                if (resp.status === 201) {
                    dispatch(emptyModal());
                }
                dispatch(getActivities());
                dispatch(unsetLoadingElement('activityForm'));
            })
            .catch(err => {
                if(window.DEBUG) console.log(err.response.data.errors);
                dispatch(unsetLoadingElement('activityForm'));
            });
     };
    
        2
  •  0
  •   Code-Apprentice    7 年前
    getActivites()
    

    成功呼叫 getActivities() . 但是,它返回一个匿名函数,其中包含 console.log() 呼叫在此处忽略此返回值。

    必须调度返回的函数,以确保调用它:

    dispatch(getActivities())