Javascript 按顺序处理websocket onmessage事件
我正在使用一个websocket API,它在远程数据库上传输实时更改,然后在本地数据库上反映这些更改。我这边的操作必须按照相同的顺序进行(当数据进入时,我创建并更新记录) 我的问题是,邮件通常以批量的方式到达,比我处理它们的速度快,最终导致混乱。在我准备处理下一个消息之前,有没有办法让onmessage等待 下面是一个我正在尝试但没有成功的例子:Javascript 按顺序处理websocket onmessage事件,javascript,node.js,asynchronous,websocket,Javascript,Node.js,Asynchronous,Websocket,我正在使用一个websocket API,它在远程数据库上传输实时更改,然后在本地数据库上反映这些更改。我这边的操作必须按照相同的顺序进行(当数据进入时,我创建并更新记录) 我的问题是,邮件通常以批量的方式到达,比我处理它们的速度快,最终导致混乱。在我准备处理下一个消息之前,有没有办法让onmessage等待 下面是一个我正在尝试但没有成功的例子: async doSomething(ev) { return new Promise(async (resolve, reject) =&g
async doSomething(ev) {
return new Promise(async (resolve, reject) => {
// database operations, etc.
resolve(true);
});
}
ws.onmessage = async (ev) => {
await doSomething();
}
您可以创建一个队列(例如,一个值数组)并使用Promise
s(以及可能的和asyncierator
,或ReadableStream
,如果需要)按顺序处理数据
比如说
new ReadableStream({
pull(controller) {
controller.enqueue(event.data)
}
})
// ..
reader.read()
.then(({value, done}) => {
// do stuff
})
您可以创建一个队列(例如,一个值数组)并使用Promise
s(以及可能的和asyncierator
,或ReadableStream
,如果需要)按顺序处理数据
比如说
new ReadableStream({
pull(controller) {
controller.enqueue(event.data)
}
})
// ..
reader.read()
.then(({value, done}) => {
// do stuff
})
@瓦内克·西@Vaneik也看到了,是的,我最后做了一个队列。@Vaneik你介意分享一下你到底是怎么做的吗?我已经退出了这段代码,但它很简单:最重要的是接收数据并按接收的顺序将其添加到队列中。然后定期处理队列并存储数据。好几个月来,它工作得毫无瑕疵@Vaneik也看到了,是的,我最后做了一个队列。@Vaneik你介意分享一下你到底是怎么做的吗?我已经退出了这段代码,但它很简单:最重要的是接收数据并按接收的顺序将其添加到队列中。然后定期处理队列并存储数据。好几个月来,它工作得毫无瑕疵。