【问题标题】:Processing websocket onmessage events in order按顺序处理 websocket onmessage 事件
【发布时间】:2019-02-16 01:16:44
【问题描述】:

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

我的问题是消息经常成批到达,比我处理它们的速度更快,最终出现乱序。有没有办法让 onmessage 在我准备好处理下一个之前等待?

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

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

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

【问题讨论】:

    标签: javascript node.js asynchronous websocket


    【解决方案1】:

    您可以创建一个队列(例如,一个值数组)并使用Promises(可能还有AsyncIterator,或ReadableStream,如果需要)按顺序处理数据。

    例如

    new ReadableStream({
      pull(controller) {
        controller.enqueue(event.data)
      }
    })
    
    // ..
    
    reader.read()
    .then(({value, done}) => {
      // do stuff
    })
    

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多