Vue.js - 在 Websocket 上使用承诺?
Posted
技术标签:
【中文标题】Vue.js - 在 Websocket 上使用承诺?【英文标题】:Vue.js - Using Promises on Websocket? 【发布时间】:2020-02-20 20:24:18 【问题描述】:我在使用带有 vue 的 websocket 时遇到了一个问题,因为我希望有一个变量来保持最后的就绪状态。 enter image description here
在第一行中,readyState 是 0,但在序列中 readyState 是 3。我怎样才能让 readyState 等于 3?
const params = Object.entries(
user: `$this.username@$this.$props.uid`,
passwd: encodeURIComponent(this.passwd),
cols: this.xterm.cols,
rows: this.xterm.rows
)
.map(([k, v]) =>
return `$k=$v`;
)
.join("&");
this.ws = await new WebSocket(`ws://$location.host/ws/ssh?$params`);
// stateConection = true
// eslint-disable-next-line no-console
console.log(this.ws);
【问题讨论】:
使用WebSocket最简单的方法是使用vue-websocket
npmjs.com/package/vue-websocket等模块
await
用于等待一个正在解决的承诺。 new AnythingThatIsntAPromise
不会返回你可以 await 的 Promise - 话虽如此,this.ws
将是 WebSocket 的一个实例,所以当你的代码添加一个无意义的 await 时,代码仍然会像 await 不存在一样工作
【参考方案1】:
您可以创建一个Promise
,它在open
上进行解析,并在error
或close
上拒绝。
const ws = new WebSocket(`ws://$location.host/ws/ssh?$params`);
const ready = new Promise((resolve, reject) =>
ws.onopen = resolve;
ws.onerror = reject;
ws.onclose = reject;
);
await ready;
这将等待直到 websocket 打开,或者如果 websockets 关闭有或没有错误,则抛出错误。
【讨论】:
以上是关于Vue.js - 在 Websocket 上使用承诺?的主要内容,如果未能解决你的问题,请参考以下文章
带有 Websocket 或 Socket.io 的 Vue.js 实时图表
Vue.js 在 websocket onmessage 事件中更新 html
如何解决Vue.js里面noVNC的截图问题——论可以跨域的webSocket
通过 Laravel 中的 websocket 收到通知后,Vue.js 组件未更新