Как закрыть веб-сокет из другой функции в JavaScript / Vue - PullRequest
0 голосов
/ 29 января 2020

У меня есть приложение для запуска WebSocket, и эта часть работает. То, что я не знаю, как сделать, это закрыть этот WebSocket. Теперь он работает так, что открывает множество разных сокетов.

WebSocket инициируется в методе, который запускается вычисляемым свойством. Но поскольку Websocket находится в методе, я не уверен, как получить доступ к WebSocket, чтобы закрыть его.

coinQuote(symbol, quotePair){
    //get pair for calling the websocket
    let thePair = symbol+quotePair;
    let pair = thePair.toLowerCase();
    //closes socket so we only get one quote.
    if(this.socketOpen === true){
      closeSocket();
    };

    let socket =  new WebSocket(`wss://stream.binance.com:9443/ws/${pair}@trade`);

    //{"e":"trade","E":1580163513309,"s":"BTCUSDT","t":235262842,"p":"8955.43000000","q":"0.27791600","b":1087544288,"a":1087544245,"T":1580163513307,"m":false,"M":true}
    // s = symbol
    // p = price

    let closeSocket = () => {
      socket.close();
      this.socketOpen = false;
    };

    socket.addEventListener('open', (open) => {
      this.socketOpen = true;
      console.log("Websocket Open in NewTrade");
    });

    socket.addEventListener('message', (event) => {
      if(event.target.readyState == 1 && event.isTrusted == true){
        //parse to JSON to gain access to the object notation
        let theData = JSON.parse(event.data);
        console.log(this.currentCoinPrice);
        this.currentCoinPrice = theData.p;
        console.log(this.currentCoinPrice);
      } else {
        this.currentCoinPrice = "Websocket Down"
      }
    });

    socket.addEventListener('error', (event) => {
      console.log("closing because " + event);
    });
  }

Вот вычисляемое свойство

coinPair(){

    if(this.model.symbol && this.model.symbolPair) {
      this.coinQuote(this.model.symbol, this.model.symbolPair);
      return this.model.symbol + this.model.symbolPair;
      console.log(this.model.symbol + this.model.symbolPair);
    };
    return null;
  }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...