У меня есть приложение для запуска 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;
}