【发布时间】:2017-01-19 09:24:20
【问题描述】:
这是我的包装函数 (checkLocationPermission),用于在尝试调用函数之前检查权限(在本例中为 geolocate())。包装器用于简化错误处理。
问题在于 async 函数相互调用,因为在 Javascript 中这是不允许的。
如何使此类包装器从 geolocate() 或作为参数传递的任何其他函数返回有效的 Promise?
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());
【问题讨论】:
-
The problem is with async functions calling each other, as in Javascript it is not allowed不确定这到底是什么意思。这段代码有什么问题?似乎locationPromise将是geolocate返回的承诺(我假设此代码在class内)
标签: javascript geolocation promise async-await android-permissions