javascript - 调度程序在接收反应本机的参数之前发送请求
问题描述
我正在调度 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");
}*/
}
解决方案
推荐阅读
- python - 在 python tkinter 画布中移动图像
- elasticsearch - ElasticSearch @query 在 Kibana 中正常工作,但在 java 中不能正常工作?
- javascript - 根据 Gatsby.js 中的当前路径更改导航样式
- docker - 使用 docker 运行 pytest selenium 测试时浏览器未打开
- javascript - 使用 JavaScript 将多个画布图像拼接成画布中的一个图像
- ios - 根据事务状态更改 UIImage
- apache-poi - 如何在 Apache POI 中设置 B4 纸的纸张尺寸(PrintSetup 中未找到格式)?
- qt - 通过Qt获取活动/非活动窗口标题的系统颜色
- flutter - 如何像 Flutter 中的专业人士一样创建自定义大小的 TabBar?
- javascript - 错误:无法解构“this.state”的属性“tags”,因为它未定义。实际上 this.state.tags 存在