React Native ждут, обещание никогда не выполняется - PullRequest
0 голосов
/ 21 февраля 2020

Я пытаюсь создать приложение блютуз для реактивного родного компьютера, но я впервые работаю с реактивным родным. У меня есть функция asycn, которую я вызываю, ведьма вызывает await BluetoothSerial.discoverUnpairedDevices(), но ничего не происходит, просто ждет. Чего мне не хватает?

Полный код функции

async discoverUnpaired () {
      if (this.state.discovering) {
        console.log("true: ", this.state.discovering)
        this.setState({ discovering: false })
        return false
      } else {
        this.setState({ discovering: true })
        try{
          console.log("false: ", this.state.discovering)
          await BluetoothSerial.discoverUnpairedDevices()
          .then((unpairedDevices) => {
            this.setState({ unpairedDevices, discovering: false })
            console.log("false: ", this.state.discovering)
          })
          .catch((err) => console.log(err.message))
          }
        catch(e){
          console.log(e)
        } 
      }
    }

PS Извините за плохой код, просто исследую активный родной Bluetooth для проекта. Если у кого-то есть хороший учебник по реагированию на родной класс c Bluetooth, это также очень поможет.

РЕДАКТИРОВАТЬ

После изменения кода на

const unpairedDevices = await BluetoothSerial.discoverUnpairedDevices();
this.setState({ unpairedDevices, discovering: false });
console.log("devices: ", unpairedDevices);

проблема все еще существует. Я думаю, что это просто ошибка в библиотеке, потому что если вызов BluetoothSerial.list() вместо BluetoothSerial.discoverUnpairedDevices(), он работает

Ответы [ 2 ]

0 голосов
/ 21 февраля 2020

После попытки внесения изменений, написанных в части редактирования вопроса, я попытался использовать BluetoothSerial.list(), и оно работало, но показывало только уже урезанные устройства, в то время как BluetoothSerial.listUnpaired() и BluetoothSerial.discoverUnpairedDevices() не работали. Все это было сделано на моем Xiaomi Mi Mix 2S телефоне. После использования телефона Nokia от моего друга все заработало как положено, и BluetoothSerial.listUnpaired() и BluetoothSerial.discoverUnpairedDevices().

0 голосов
/ 21 февраля 2020

Чтобы правильно использовать синтаксис async / await, ваш код должен выглядеть примерно так:

   try{
      console.log("false: ", this.state.discovering)
      const unpairedDevices = await BluetoothSerial.discoverUnpairedDevices();
      this.setState({ unpairedDevices, discovering: false });
      console.log("false: ", this.state.discovering);
    catch(e){
      console.log(e)
    } 
...