2017-07-19 25 views
0

有沒有什麼辦法可以提升單向消息,如Worker消息或WebSocket消息?有沒有任何方法可以提升單向消息,如工作者消息或WebSocket消息?

我想在可能的情況下將套接字消息和工作者消息轉換爲承諾。有沒有辦法做到這一點? 如:

myWebWorker.postMessage(「someMessage」),那麼()...

也許通過訂閱某種類型的公交車,或通過使用觀測量的?看起來Vue.js有這樣的可用vue-worker的東西。 (https://alligator.io/vuejs/vue-workers/) 他們是怎麼做到的?它僅適用於內聯WebWorkers嗎?如果我可以使用WebWorker,我想使用外部文件。我希望能夠爲服務器的套接字消息做同樣的事情。例如:

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

任何想法?

+1

你只需要包裝的方法,在無極構造。 – T4rk1n

回答

0

使用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? –

相關問題