Socket.emit приносит несколько значений - PullRequest
0 голосов
/ 30 октября 2018

socket.emit внутри socket.on объединяет одно и то же значение после каждого излучения. Вот мой код на стороне сервера

io.on('connection', function(socket){
let balance = 6000;


console.log('a user connected');

  socket.on('giveValue',function(data){
        if(data.msg==="New Value"){
          let x = Math.floor(Math.random() * 100 - 50);
          balance += x;
          socket.emit('takeValue',{balance:balance,value:x});
        }
  });

  socket.on('disconnect',function(){
      console.log('User disconnected');
  });
  socket.on('getBalance',(data)=>{
    if(data.msg==='bringBalance'){
      socket.emit('ubalance',{data:balance});
    }
  })

});

А это на стороне клиента, для стороны клиента я использую Angular 6

constructor() {
    this.socket = io('http://localhost:4000');
  }

  ngOnInit() {
    this.socket.emit('getBalance',{msg:"bringBalance"});
    this.socket.on('ubalance',(data)=>{
      console.log(data);
      this.balance=data.data;
    });
  }

  getSum(event) {
    this.socket.open();
    this.socket.emit('giveValue',{msg:"New Value"});
    this.socket.on('takeValue', (data) => {
       this.balance=data.balance;
       console.log("Value====="+data.value) + "\n";
       console.log("Balance======"+data.balance);

    });
  }

После того, как каждый щелчок запускает функцию getSum () и генерирует случайные значения в бэк-энде, добавляйте эти значения в баланс. Все это делает моя бэк-энда. Так что проблема в том, что socket.on ("takeValue") после каждого клика приносит еще один То же самое значение. Как я могу исправить эту часть. Извините за мои языковые ошибки, я надеюсь, что вы меня поняли. Спасибо за внимание и за помощь.

1 Ответ

0 голосов
/ 30 октября 2018

Ваша проблема в том, что вы объявляете .on события внутри функций, и каждый раз, когда вы запускаете функцию, вы устанавливаете для нового слушателя событие takeValue. Попробуйте ниже фрагмент или что-то вроде этого

constructor() {
    this.socket = io('http://localhost:4000');
}

this.socket.on('ubalance',(data)=>{
    console.log(data);
    this.balance=data.data;
    });

this.socket.on('takeValue', (data) => {
    this.balance=data.balance;
    console.log("Value====="+data.value) + "\n";
    console.log("Balance======"+data.balance);

    });

ngOnInit() {
    this.socket.emit('getBalance',{msg:"bringBalance"});

}

getSum(event) {
    this.socket.open();
    this.socket.emit('giveValue',{msg:"New Value"});

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