Обработка событий onsossage websocket в порядке - PullRequest
0 голосов
/ 16 февраля 2019

Я использую API веб-сокета, который транслирует изменения в реальном времени на удаленной базе данных, которые затем отражаются в локальной базе данных.Операции на моей стороне должны быть выполнены в том же порядке (я создаю и обновляю записи по мере поступления данных).

Моя проблема в том, что сообщения часто приходят навалом, быстрее, чем я могу их обработать и в конечном итогене работает.Есть ли способ заставить onmessage ждать, пока я не буду готов обработать следующий?

Вот пример того, что я пытаюсь без успеха:

async doSomething(ev) {
    return new Promise(async (resolve, reject) => {
        // database operations, etc.
        resolve(true);
    });
}

ws.onmessage = async (ev) => {
    await doSomething();
}

1 Ответ

0 голосов
/ 16 февраля 2019

Вы можете создать очередь (например, массив значений) и использовать Promise s (и, возможно, и AsyncIterator, или ReadableStream, если необходимо) для обработки данных в последовательном порядке.

Например

new ReadableStream({
  pull(controller) {
    controller.enqueue(event.data)
  }
})

// ..

reader.read()
.then(({value, done}) => {
  // do stuff
})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...