Javascript React Native-返回未定义的简单JS函数
我正在做一个React原生项目,我从一个简单的.js文件导入了这个函数。我在React本机组件内的状态上调用此函数,并在按钮上使用函数返回的内容更新该状态 由于某些原因,它返回undefined,而不是我期望收到的true/false返回Javascript React Native-返回未定义的简单JS函数,javascript,reactjs,react-native,Javascript,Reactjs,React Native,我正在做一个React原生项目,我从一个简单的.js文件导入了这个函数。我在React本机组件内的状态上调用此函数,并在按钮上使用函数返回的内容更新该状态 由于某些原因,它返回undefined,而不是我期望收到的true/false返回 export const requestLocalizationPermissions = () => { if (Platform.OS === 'ios') { return true } PermissionsAndroid
export const requestLocalizationPermissions = () => {
if (Platform.OS === 'ios') {
return true
}
PermissionsAndroid.request(
PermissionsAndroid.PERMISSIONS.ACCESS_COARSE_LOCATION,
{
title:
'Accept this',
buttonNeutral: '',
buttonNegative: 'Cancelar',
buttonPositive: 'OK',
},
)
.then(res => {
if (res === 'granted') {
PermissionsAndroid.request(
PermissionsAndroid.PERMISSIONS.ACCESS_FINE_LOCATION,
{
title:
'Accept this',
buttonNeutral: '',
buttonNegative: 'Cancelar',
buttonPositive: 'OK',
},
)
.then(res => {
if (res === 'granted') {
console.log('sucess')
return true
} else if (res === 'never_ask_again') {
Alert.alert(
'Error',
texts.unblock_localization,
[
{
text: 'OK',
onPress: () => console.log('Login > Alert hidden'),
},
],
{ cancelable: false },
)
return false
}
})
.catch(err => {
console.log(err)
return false
})
} else if (res === 'never_ask_again') {
Alert.alert(
'Error',
texts.unblock_localization,
[{ text: 'OK', onPress: () => console.log('Login > Alert hidden') }],
{ cancelable: false },
)
return false
}
})
.catch(err => {
console.log(err)
return false
})
}
我确实会在控制台上打印成功消息,但是当我记录调用的函数时,我确实收到了未定义的消息
感谢您抽出时间我想给您一些建议: 将此函数包装为
async
函数一,类似于:
export const requestLocalizationPermissions = async () => {
if (Platform.OS === 'ios') {
return true
}
try {
const permission = await PermissionsAndroid.request(
PermissionsAndroid.PERMISSIONS.ACCESS_COARSE_LOCATION,
{
title: 'Accept this',
buttonNeutral: '',
buttonNegative: 'Cancelar',
buttonPositive: 'OK',
}
)
if (permission === 'granted') {
const permissionRes = await PermissionsAndroid.request(
PermissionsAndroid.PERMISSIONS.ACCESS_FINE_LOCATION,
{
title: 'Accept this',
buttonNeutral: '',
buttonNegative: 'Cancelar',
buttonPositive: 'OK',
}
)
if (permissionRes === 'granted') {
console.log('sucess')
return true
} else if (permissionRes === 'never_ask_again') {
Alert.alert(
'Error',
texts.unblock_localization,
[
{
text: 'OK',
onPress: () => console.log('Login > Alert hidden'),
},
],
{ cancelable: false }
)
return false
}
} else if (permission === 'never_ask_again') {
Alert.alert(
'Error',
texts.unblock_localization,
[{ text: 'OK', onPress: () => console.log('Login > Alert hidden') }],
{ cancelable: false }
)
return false
} else {
return false
}
} catch (err) {
console.log(err)
return false
}
}
const requestCameraPermission=async()=>{
试一试{
授予的常数=等待许可和ROID.request(
权限和roid.PERMISSIONS.CAMERA,
{
标题:“酷照应用程序照相机许可”,
信息:
“酷照应用程序需要访问您的相机”+
“所以你可以拍很棒的照片。”,
buttonNeutral:“稍后再问我”,
按钮否定:“取消”,
按钮积极:“好的”
}
);
如果(已授予===权限sandroid.RESULTS.已授予){
log(“您可以使用相机”);
}否则{
console.log(“摄像头权限被拒绝”);
}
}捕捉(错误){
控制台。警告(错误);
}
};
这段代码来自React原生文档
这个函数PermissionsAndroid.request
返回一个承诺,也许这就是你收到这个未定义的的原因
您还需要返回它的结果。因此:
export const requestLocalizationPermissions=()=>{
...
返回权限和roid.request(…)
...
}
我想你必须在那之后回来。像那样=>
return axios
.get(`${SERVER_API}/getChannel/${channel}`)
.then((resp) => {
return resp.data;
});
这里的问题是,PermissionsAndroid.request
是一个承诺,您的函数调用不会等待它的响应返回到代码,您可以将其更改为以下内容:
export const requestLocalizationPermissions = async () => {
if (Platform.OS === 'ios') {
return true
}
try {
const permission = await PermissionsAndroid.request(
PermissionsAndroid.PERMISSIONS.ACCESS_COARSE_LOCATION,
{
title: 'Accept this',
buttonNeutral: '',
buttonNegative: 'Cancelar',
buttonPositive: 'OK',
}
)
if (permission === 'granted') {
const permissionRes = await PermissionsAndroid.request(
PermissionsAndroid.PERMISSIONS.ACCESS_FINE_LOCATION,
{
title: 'Accept this',
buttonNeutral: '',
buttonNegative: 'Cancelar',
buttonPositive: 'OK',
}
)
if (permissionRes === 'granted') {
console.log('sucess')
return true
} else if (permissionRes === 'never_ask_again') {
Alert.alert(
'Error',
texts.unblock_localization,
[
{
text: 'OK',
onPress: () => console.log('Login > Alert hidden'),
},
],
{ cancelable: false }
)
return false
}
} else if (permission === 'never_ask_again') {
Alert.alert(
'Error',
texts.unblock_localization,
[{ text: 'OK', onPress: () => console.log('Login > Alert hidden') }],
{ cancelable: false }
)
return false
} else {
return false
}
} catch (err) {
console.log(err)
return false
}
}
请记住,您的功能现在是一个承诺,您需要等待响应。在许多地方,您不会返回任何内容。。。例如如果res不等于授予的,
或等于不得再次询问
。。。您没有返回任何内容(显然,我不知道所有可能的值…但这可能是原因)