Javascript 用于检查权限的包装器

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

下面是我的包装函数checkLocationPermission,用于在尝试调用函数(本例中为geologe)之前检查权限。包装器用于简化错误处理

问题在于异步函数之间相互调用,因为在Javascript中不允许这样做

如何使这样的包装器从geolocate或作为param传递的任何其他函数返回有效的承诺

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返回的承诺我假设这段代码在一个类中