写项目的时候遇到一个问题,一个数组中每个元素都需要通过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)
})
}