Задать вопрос
@Muramidaza

Как сделать промис на ожидание изменения переменной?

У меня в сторе mobx в react-native есть переменная, содержащая параметры для запросов. Запросы отправляются по очереди. С помощью async await я сделал так чтобы следующий запрос не отправлялся пока не отправится предыдущий.
В ответ на запросы устройство отсылает данные, но по другому каналу, не связанным c каналом по которому отправляются запросы. Причем там в библиотеке прием сделан по событию. Выяснилось, что данные отправляются слишком быстро, устройство "глотает" некоторые запросы и не отвечает на них. Хотя периодически успевает ответить на все. Я сделал промис с задержкой и устройство стало успевать всегда. Но я хочу сделать так чтобы следующий запрос не отправлялся пока не будут приняты данные. То есть например если переменная waitingData пока true следующий запрос не отправляется. В false она будет сбрасываться после приема данных в обработчике события. Сейчас код выглядит так:

async startQueue(deviceID: string, serviceUUID: string, characteristicUUID: string) {
    for (const item of this.queue) {
      this.waitingData = true; - Вот здесь хочу ставить переменную в true и пока в обработчике события она не сбросится в false не отправлять следующий запрос
      let getValue = this.BLEService.createDataArr(item.dataType, item.value);
      await BleManager.write(deviceID, serviceUUID, characteristicUUID, getValue);
      await this.receiveDataTrigger(); - задержка в 2 секунды и устройство успевает отвечать
    }
  }

  receiveDataTrigger = () => {
    return new Promise(function(resolve) {
      setTimeout(() => {
        resolve("result");
      }, 2000);
    });
  }


Как сделать это? Например сделать промис, который будет контролировать состояние переменой и переходить в resolve если переменная стала false. Пробовал циклом, но как пробросить в промис this с waitingData. this здесь - это стор mobx. Просто ответ может не обязательно может быть через 2 секунды - может гораздо раньше, каждый раз по разному и ждать даже секунду - долговато получается.
  • Вопрос задан
  • 145 просмотров
Подписаться 1 Средний Комментировать
Решения вопроса 1
Alexandroppolus
@Alexandroppolus
кодир
если надо ждать наблюдаемую переменную, то вот: https://mobx.js.org/reactions.html#when
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы