反应本机函数返回未定义

时间:2020-07-18 18:49:36

标签: javascript android reactjs bluetooth native

我正在尝试在react native中创建一个蓝牙应用程序。为了提出挑战,我决定创建自己的本地蓝牙模块。现在,我想呈现一些有关蓝牙连接的状态数据(如果已启用或连接到任何设备)。

我有一个函数,该函数调用函数Bluetooth.isEnabled()。 Bluetooth.isEnabled具有一个回调参数,该参数将获取蓝牙的状态(如果为true,则为true,否则为false)。

 bluetooth_isEnabled(){
   
    Bluetooth.isEnabled((status)=>{
      console.log(status)
      return status;
      

    })
  

这是构造函数

class App extends Component {
  constructor(props){

    super(props)
    
    this.state = {
    
      isConnected: false,
      isEnabled: false 
    }
    this.checkConnection = this.checkConnection.bind(this);
    this.bluetooth_isEnabled = this.bluetooth_isEnabled.bind(this);
    this.bluetoothStatus = this.bluetoothStatus.bind(this);
  }
.
.
.

在以下功能中,我试图检查蓝牙是否已启用,但状态未定义

bluetoothStatus(){
    var status = this.bluetooth_isEnabled()
    console.log(status)
    if(this.bluetooth_isEnabled()){
      return(
        <Text>ENABLED</Text>
      )
    }
    else{
      return(
        <Text>DISABLED</Text>
      )
    }
    
  }

bluetooth_isEnabled()将始终返回未定义。我检查了console.log在Bluetooth.isEnabled()函数中的状态,它是真的。

为什么bluetooth_isEnabled()返回未定义?

1 个答案:

答案 0 :(得分:1)

您的bluetooth_isEnabled函数是一个异步函数。您应该使用Promise或async / await结构返回一个值。更新您的函数以使用async / await

返回承诺
 bluetooth_isEnabled = async()=>{

   const status = await Bluetooth.isEnabled();      

})

然后将其用作:

this.bluetooth_isEnabled.then((status) => {
   this.setState({status:status})
})

并且您不应使用this.variable_name访问变量,而应使用state。

bluetoothStatus(){
 var status = this.state.status;
 console.log(status)
 if(status()){
  return(
    <Text>ENABLED</Text>
  )
}
else{
  return(
    <Text>DISABLED</Text>
  )
 }
}