关于javascript:按顺序处理websocket onmessage事件

Processing websocket onmessage events in order

我正在使用websocket API,该API在远程数据库上流式传输实时更改,然后将其反映在本地数据库上。 我这一边的操作必须以相同的顺序进行(我会在数据输入时创建和更新记录)。

我的问题是消息经常大量到达,比我处理消息的速度快,最终导致混乱。 在我准备处理下一个消息之前,有没有办法让onmessage等待?

这是我尝试的示例,没有成功:

1
2
3
4
5
6
7
8
9
10
async doSomething(ev) {
    return new Promise(async (resolve, reject) => {
        // database operations, etc.
        resolve(true);
    });
}

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

您可以创建一个队列(例如,一个值数组),然后使用Promise s(如果需要,可以使用AsyncIteratorReadableStream)按顺序处理数据。

例如

1
2
3
4
5
6
7
8
9
10
11
12
new ReadableStream({
  pull(controller) {
    controller.enqueue(event.data)
  }
})

// ..

reader.read()
.then(({value, done}) => {
  // do stuff
})