Javascript 按顺序处理websocket 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

我正在使用一个websocket API,它在远程数据库上传输实时更改,然后在本地数据库上反映这些更改。我这边的操作必须按照相同的顺序进行(当数据进入时,我创建并更新记录)

我的问题是,邮件通常以批量的方式到达,比我处理它们的速度快,最终导致混乱。在我准备处理下一个消息之前,有没有办法让onmessage等待

下面是一个我正在尝试但没有成功的例子:

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你介意分享一下你到底是怎么做的吗?我已经退出了这段代码,但它很简单:最重要的是接收数据并按接收的顺序将其添加到队列中。然后定期处理队列并存储数据。好几个月来,它工作得毫无瑕疵。