有没有任何方法可以提升单向消息,如工作者消息或WebSocket消息?

问题描述:

有没有什么办法可以提升单向消息,如Worker消息或WebSocket消息?有没有任何方法可以提升单向消息,如工作者消息或WebSocket消息?

我想在可能的情况下将套接字消息和工作者消息转换为承诺。有没有办法做到这一点? 如:

myWebWorker.postMessage(“someMessage”),那么()...

也许通过订阅某种类型的公交车,或通过使用观测量的?看起来Vue.js有这样的可用vue-worker的东西。 (https://alligator.io/vuejs/vue-workers/) 他们是怎么做到的?它仅适用于内联WebWorkers吗?如果我可以使用WebWorker,我想使用外部文件。我希望能够为服务器的套接字消息做同样的事情。例如:

socket.sendMessage( 'someMessage'),那么()...

任何想法?

+1

你只需要包装的方法,在无极构造。 – T4rk1n

使用promise构造函数来解析onmessage回调。

const sendMessage = (socket, message) => new Promise((resolve,reject) => { 
 
    const handleRes = (e) => { 
 
    resolve(e) 
 
    socket.removeEventListener('message', handleRes) 
 
    } 
 
    const handleRej = (e) => { 
 
    reject(e) 
 
    socket.removeEventListener('error', handleRej) 
 
    } 
 
    socket.addEventListener('message', handleRes) 
 
    socket.addEventListener('error', handleRej) 
 
    socket.send(message) 
 
})

+0

如果我有多个异步发送的传出消息,那么socket.onmessage是否可能会被发送出去的不同消息覆盖?然后不会这些消息不能正确处理? –

+0

@JustinLevine然后使用socket.addEventListener – T4rk1n

+0

所以你建议在每条消息上添加一个eventListener,或许将一个唯一的标识符作为一个事件。然后什么?它解决后销毁eventListener? –