Javascript React Native-返回未定义的简单JS函数

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

我正在做一个React原生项目,我从一个简单的.js文件导入了这个函数。我在React本机组件内的状态上调用此函数,并在按钮上使用函数返回的内容更新该状态

由于某些原因,它返回undefined,而不是我期望收到的true/false返回


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不等于授予的
或等于
不得再次询问
。。。您没有返回任何内容(显然,我不知道所有可能的值…但这可能是原因)