Javascript 用于检查权限的包装器
下面是我的包装函数checkLocationPermission,用于在尝试调用函数(本例中为geologe)之前检查权限。包装器用于简化错误处理 问题在于异步函数之间相互调用,因为在Javascript中不允许这样做 如何使这样的包装器从geolocate或作为param传递的任何其他函数返回有效的承诺Javascript 用于检查权限的包装器,javascript,geolocation,promise,async-await,android-permissions,Javascript,Geolocation,Promise,Async Await,Android Permissions,下面是我的包装函数checkLocationPermission,用于在尝试调用函数(本例中为geologe)之前检查权限。包装器用于简化错误处理 问题在于异步函数之间相互调用,因为在Javascript中不允许这样做 如何使这样的包装器从geolocate或作为param传递的任何其他函数返回有效的承诺 async geolocate() { return new Promise((resolve, reject) => { navigator.geolocation.get
async geolocate() {
return new Promise((resolve, reject) => {
navigator.geolocation.getCurrentPosition(
(position) => {
resolve(position);
},
(err) => {
reject(err);
},
{enableHighAccuracy: true, timeout: 30000, maximumAge: 3000}
);
});
}
async checkPermission(permission, fn) {
var status = await Permissions.getPermissionStatus(permission);
if (status!='authorized') {
Errors.permissionError();
this.resetAfterError();
return Promise.reject("PERMISSION ERROR");
}
try {
return fn();
} catch(err) {
Errors.internalError(err);
this.resetAfterError();
return Promise.reject("ERROR OTHER");
}
}
电话的来源:
var locationPromise = this.checkPermission('location', ()=>this.geolocate());
异步函数返回一个承诺。如果在geolocate中显式创建Promise对象,则无需使其异步
不要从异步函数返回承诺对象,如果要拒绝承诺,只需抛出一个错误:
功能地理定位{
返回新的PromiseSolve,拒绝=>{
navigator.geolocation.getCurrentPosition
位置=>{
解析位置;
},
错误=>{
拒绝者;
},
{enableHighAccurance:true,超时:30000,最大值:3000}
;
};
}
异步函数checkPermissionpermission,fn{
var status=等待权限。getPermissionStatuspermission;
如果状态!=“已授权”{
错误。许可错误;
这是一个错误;
抛出新的ErrorPERMISSION错误;
}
试一试{
返回fn;
}捕手{
Errors.internalerror;
这是一个错误;
抛出新的错误;
}
}
checkPermission'location',=>GeoLocation.thenlocationPromise=>{
//...
};
问题在于异步函数之间相互调用,因为在Javascript中不允许这样做,因为不知道这到底意味着什么。这个代码有什么问题?似乎locationPromise将是geolocate返回的承诺我假设这段代码在一个类中