【问题标题】:Why I cannot get this dispatch function to run?为什么我不能让这个调度功能运行?
【发布时间】:2020-12-05 00:26:31
【问题描述】:

我不知道为什么我不能让这个调度函数到达console.log(3) 和console.log(4),我试图从成功函数内部移动调度,但它再次不起作用。

export const getDistance = (storeLocation) => {
    console.log('called1')
    const options = {
        enableHighAccuracy: true,
        timeout: 5000,
        maximumAge: 0,
    };

    const success = (pos) => {
        console.log('called2')

        return dispatch => {
            console.log('called3')
            dispatch({ type: FETCHING_GEO_DATA })

            axios
                .get(
                    `${process.env.REACT_APP_GEO_BASE_URL}?waypoint.0=${pos.coords.latitude},${pos.coords.longitude}&waypoint.1=${storeLocation}&du=mi&key=${process.env.REACT_APP_GEO_KEY}`
                )
                .then((res) => {
                    console.log('called4')

                    dispatch({
                        type: FETCHING_GEO_DATA_SUCCESS,
                        payload: res.data.resourceSets[0].resources[0].travelDistance.toFixed(1)
                    })
                })
                .catch((err) => {
                    console.log('called4')
                    dispatch({
                        type: FETCHING_GEO_DATA_FAILURE,
                        payload: err
                    })
                });
        }

    }

    const error = (err) => {
        console.warn(`ERROR(${err.code}): ${err.message}`);
    }

    return window.navigator.geolocation ? navigator.geolocation.getCurrentPosition(success, error, options) : null
};

【问题讨论】:

    标签: javascript redux ecmascript-6 react-redux dispatch


    【解决方案1】:

    你没有调用return inside success的内部函数。

    试试这个:

     return window.navigator.geolocation ?
     navigator.geolocation.getCurrentPosition(()=>success(pos)(), error, options) 
     : null
    

    如果你想在不传递参数的情况下保留你的成功函数,你可能会立即调用调度内部函数 (IIEF)

      const success = (pos) => {
        console.log('called2')
    
        ((dispatch) => {
          console.log('called3')
          dispatch({
            type: FETCHING_GEO_DATA
          })
    
          axios
            .get(
              `${process.env.REACT_APP_GEO_BASE_URL}?waypoint.0=${pos.coords.latitude},${pos.coords.longitude}&waypoint.1=${storeLocation}&du=mi&key=${process.env.REACT_APP_GEO_KEY}`
            )
            .then((res) => {
              console.log('called4')
    
              dispatch({
                type: FETCHING_GEO_DATA_SUCCESS,
                payload: res.data.resourceSets[0].resources[0].travelDistance.toFixed(1)
              })
            })
            .catch((err) => {
              console.log('called4')
              dispatch({
                type: FETCHING_GEO_DATA_FAILURE,
                payload: err
              })
            });
        })()
      }
    

    【讨论】:

    • 首先我得到的“pos”没有定义,我删除了它,现在我得到的第一个调度不是一个函数->“dispatch({ type: FETCHING_GEO_DATA })”
    • @eugin-sunic 好的,那我不需要它,因为我实际上从未向它传递任何东西。但是为什么我现在得到 dispatch 不是一个函数呢?
    • 您的调度似乎没有在那个范围内定义,您应该在 getdistance 函数中传递它
    • 相同的结果。我将其移至 getDistance 并尝试将其移至 success 本身只是为了看看它是否有效但没有运气
    猜你喜欢
    • 2016-01-10
    • 1970-01-01
    • 2021-09-15
    • 1970-01-01
    • 1970-01-01
    • 2021-02-02
    • 1970-01-01
    • 2015-04-19
    • 1970-01-01
    相关资源
    最近更新 更多