Как закачивать данные по bluetooth без зависания JavaScript нить - PullRequest
0 голосов
/ 27 мая 2020

Я пытаюсь загрузить большое количество данных с нескольких устройств Bluetooth одновременно. Но поскольку данных очень много, приложение зависает во время загрузки. Мой код работает примерно так (псевдокод):

function BluetoothDownloadPage() {
    const [data, setData] = useState({
        device1: [],
        device2: [],
        device3: [],
        device4: [],
    });

    async function fetchData(device) {
        device.addListener(data => setData(newData=> [...data[device.getName()], newData]);
        device.startDownload();
    }

    async function downloadFromAllDevices() {
        fetchData(device1);
        fetchData(device2);
        fetchData(device3);
        fetchData(device4);
    }

    return (
        <View>
            <Text>{JSON.stringify(data)}</Text>
            <Button onPress={downloadFromAllDevices}></Button>
        </View>
    );
}

Когда новые данные принимаются с устройства, они сначала сохраняются в моем пользовательском классе Device. Каждую секунду класс устройства отправляет уведомление компонентам React для обновления состояния (индикатор выполнения).

Я не знаю, как я могу загрузить данные, не вешая поток JS. Каждый датчик отправляет 240 байтовых пакетов за раз со скоростью примерно 8 Кбит / с. Это равносильно необходимости записи данных в массив более 30 раз в секунду для каждого устройства, и я думаю, что это слишком много для низкокачественных устройств.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...