我只需要在获得位置许可后调用一个函数即可。 这是我的代码:
componentDidMount() {
this.samplePermissionRequest();
alert('componentDidMount');
}
samplePermissionRequest=()=>{
async function requestLocationPermission() {
try {
const granted = await PermissionsAndroid.request(
PermissionsAndroid.PERMISSIONS.ACCESS_FINE_LOCATION,
{
'title': 'Cool Location tracking App Permission',
'message': 'This Cool App needs access to your location '
}
)
if (granted === PermissionsAndroid.RESULTS.GRANTED) {
this.justStart();
alert("You can use the app");
} else {
alert("You can not use the app");
}
} catch (err) {
console.warn(err);
}
}
requestLocationPermission();
}
justStart=()=>{
alert("start with permission");
}
运行此代码时,我只会看到第一个警报的对话框(alert('componentDidMount'))。
如果我删除“ this.justStart();”行,则也会显示第二个警报。所以问题是“ this.justStart();”不起作用。
为什么?
答案 0 :(得分:1)
您必须使用Promise对象,您可以像这样更改代码:
componentDidMount() {
this.requestLocationPermission().then(
alert('componentDidMount')
);
}
async requestLocationPermission() {
return PermissionsAndroid.request(
PermissionsAndroid.PERMISSIONS.ACCESS_FINE_LOCATION,
{
'title': 'Cool Location tracking App Permission',
'message': 'This Cool App needs access to your location '
}
).then(granted => {
if (granted === PermissionsAndroid.RESULTS.GRANTED) {
this.justStart();
alert("You can use the app");
} else {
alert("You can not use the app");
}
}).catch(e => console.warn(e));
}
关于异步方法返回的承诺,您可以使用.then和.catch
答案 1 :(得分:1)
因为<input type="text" [(ngModel)]="text" class="form-control" placeholder="Search">
将位于this
函数中的undefined
内。
因此requestLocationPermission
将引发类型错误,该错误将由您的try / catch语句捕获。
解决方案1,
致电this.justStart()
时绑定this
。
requestLocationPermission.call(this);
解决方案2,
删除函数requestLocationPermission
并直接使用requestLocationPermission
而不是使用内部函数并再次调用。
samplePermissionRequest
希望有帮助。