Vue. js - Использование Promises на Websocket? - PullRequest
0 голосов
/ 20 февраля 2020

Я сталкиваюсь с проблемой при использовании websocket с vue, потому что ожидаю, что переменная сохранит последнее состояние готовности. введите описание изображения здесь

В первой строке 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);

1 Ответ

0 голосов
/ 21 февраля 2020

Вы можете создать 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;

. Он будет ждать до тех пор, пока не будет открыта веб-розетка, или выдаст ошибку если веб-сокеты закрываются с ошибкой или без нее.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...