websocket异步变同步,websocket同步操作

634 阅读1分钟

写项目的时候遇到一个问题,一个数组中每个元素都需要通过websocket去拿取相应的值时,由于websocket的异步操作,网络延迟等会导致值匹配不上; 那么这时候就需要将websocket改成同步操作,有了返回值后再去下一次请求; 具体代码:

websocket.js

const ws = new WebSocket('ws://127.0.0.1:8000')
ws.onopen = () => {
    console.log('open')
}
ws.onclose = function (e) {
    console.log('close')
}

async function sendMessageToServe(msg) {
    ws.send(msg)
    return await new Promise((resolve) => {
        ws.onmessage = function (e) {
            console.log('onmessage')
                resolve(e.data)
        }
    })
}

export default sendMessageToServe
使用:

index.vue

import sendMessageToServe from "websocket.js";

let arr = [1,2,3]
for (let a = 0; a < arr.length; a++) {
//循环向websocket请求
  await sendMessageToServe(arr[a]).then(async val => {
  //val就是websocket返回过来的数据,拿到数据后就可以做你想做的事情啦
  
    await newParseCert(e, val)
  })
}