首页 > 解决方案 > 调度程序在接收反应本机的参数之前发送请求

问题描述

我正在调度 lat 和 long 但看起来调度程序在调用我的 async 函数之前发送它们。下面是我的代码。Dispatch 函数正在向我的减速器发送未定义,所以我无法访问该位置。另外,async await dint 似乎也在这里工作。它在执行等待和返回语句之前从函数返回。提前感谢您的帮助。

export function fetchUserCurrentLocationAsync() {
  return (dispatch, getState) => {
    getLocationAsync().then(
      position => {
        // console.log("now I am dispatching the position")
         // console.log(position)
        dispatch(setInitialUserLocation(position));
      }, () => {
           // console.log("now I am not dispatching the position")
            dispatch({ type: LOCATION_NOT_FOUND })},
      { enableHighAccuracy: true, timeout: 20000, maximumAge: 1000 }
    );
      navigator.geolocation.watchPosition((position) => {
          dispatch(setUserLocation(position));
          updateLocation(getState().driver.user, position);
      }, (error) => {
          alert(JSON.stringify(error))
      }, {
          enableHighAccuracy: true,
          timeout: 20000,
          maximumAge: 1000
      });
  };
}

async function getLocation(callback) {
    if (navigator.geolocation) {
        // console.log("requesting location")
        let x= await navigator.geolocation.getCurrentPosition(callback);
        // console.log("returning location");
        callback(x);
    } else {
        alert('Unable to access location.Please try later.')
    }
}
async function getLocationAsync() {
    let locatio=null;
    // console.log("It is coming in this function");

    try {
        const granted = await PermissionsAndroid.request(
            PermissionsAndroid.PERMISSIONS.ACCESS_FINE_LOCATION)
        if (granted === PermissionsAndroid.RESULTS.GRANTED) {
       //     console.log("hitting the location service");
            /*navigator.geolocation.getCurrentPosition((position) => {
         //       console.log("coming in the successs")
          //      locatio = {position: {longitude: position.longitude, latitude: position.latitude}};
            //    console.log(locatio);
                return locatio;
            }, (error) => {
              //  console.log("coming in the error")
                alert(JSON.stringify(error))
                return locatio;
            }, {
                enableHighAccuracy: false,
                timeout: 5000,
                maximumAge: 10000
            });*/
            await getLocation(function (position) {
                var currentLatitude = position.coords.latitude;
                var currentLongitude = position.coords.longitude;
                locatio = {position: {longitude: currentLongitude, latitude: currentLatitude}};
              //  console.log(locatio)
              //  console.log("sending from 105")
                return locatio;
                //some other codes to display the page
                //...
            });
            // return locatio;
        } else {
            alert("Please Turn On your Device GPS");
        }
    } catch (err) {
       // console.log("warning")
       // console.warn(err)
    }
/*  const { status } = await PermissionsAndroid.request(
      PermissionsAndroid.PERMISSIONS.CAMERA);
  // console.log('=================location===================');
  // alert(status);
  // console.log('=============location=======================');
  if (status === PermissionsAndroid.RESULTS.GRANTED) {
      let locatio;
      navigator.geolocation.getCurrentPosition((position) => {
          locatio = {position: {longitude: position.longitude, latitude: position.latitude}};
      }, (error) => {
          alert(JSON.stringify(error))
      }, {
          enableHighAccuracy: true,
          timeout: 20000,
          maximumAge: 1000
      });
      return locatio;// 
// console.log('=================location===================');
    // console.log(location);
    // alert(location.coords.latitude);

    // alert(location.coords.longitude);
    // console.log('=============location=======================');
    // return location;
  } else {
    alert("Please Turn On your Device GPS");
  }*/
}

标签: javascriptreactjsreact-nativeredux

解决方案


推荐阅读