我正在使用websocket API,该API在远程数据库上流式传输实时更改,然后将其反映在本地数据库上。我这一边的操作必须按照相同的顺序进行(我会在数据输入时创建和更新记录)。
我的问题是消息经常大量散发,比我处理它们的速度快,最终导致混乱。在我准备处理下一个消息之前,有没有办法让onmessage等待?
这是我尝试的示例,没有成功:
async doSomething(ev) {
return new Promise(async (resolve, reject) => {
// database operations, etc.
resolve(true);
});
}
ws.onmessage = async (ev) => {
await doSomething();
}
答案 0 :(得分:0)
您可以创建队列(例如,值的数组)并使用Promise
s(可能还需要AsyncIterator
或ReadableStream
(如果需要))按顺序处理数据订单。
例如
new ReadableStream({
pull(controller) {
controller.enqueue(event.data)
}
})
// ..
reader.read()
.then(({value, done}) => {
// do stuff
})