我正在尝试在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()返回未定义?
答案 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>
)
}
}