我正在分派lat和long,但是看起来分派器在我的异步函数被调用之前就发送它们。下面是我的代码.Dispatch函数正在向我的reducer发送未定义的消息,所以我无法访问该位置。 dint似乎也可以在这里工作。它是在执行await和return语句之前从函数返回的。预先感谢您的帮助。
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");
}*/
}