Вот моя функция-обертка (checkLocationPermission
), чтобы проверить разрешения, прежде чем пытаться вызвать функцию (в данном случае geolocate()
). Обертка используется для упрощения обработки ошибок.Wrapper для проверки разрешений
Проблема связана с функциями async
, вызывающими друг друга, так как в Javascript это запрещено.
Как сделать такую оболочку верным действующим обещанием от geolocate()
или любой другой функцией, переданной как параметр?
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());
'Проблема с функциями асинхронных вызова друг с другом, как в JavaScript, это не разрешено "не совсем точно, что это значит. Какие у вас проблемы с этим кодом? Кажется, что 'locationPromise' будет Promise, возвращаемым' geolocate' (я предполагаю, что этот код находится внутри 'class') –