У меня в сторе 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 секунды - может гораздо раньше, каждый раз по разному и ждать даже секунду - долговато получается.