简体   繁体   中英

socket.emit and wait until user response after that resolve promise

I am writing web app which controls hardware. I have a server communicated with the device through the serial port. Everything works except the interaction with a user. The device has registers which I repeatedly ask waiting for some values. If some values come, I emit an event to the client and confirmation box appears. The user selects resume or abort. After that client emit the response (true or false) and I would like to resolve this response in my promise function. I need to catch response from the user exactly in the function because I have a sequence of actions I need to proceed. Promise after promise. It seems that my function ends before the user answers. How to solve this problem?

this is my code on the server:

waitUserResponse(message) {
    return new Promise(async (resolve) => {
      const handler = function(data) {
        console.log('userAnswer = ', data);
        resolve(data);
        return;
      }
      this.io.sockets.emit('alerts', message);
      this.io.sockets.once('userAnswer', handler);
    })
  }

this is my code on the client:

componentDidMount() {
    const confirmDialog = (msg) => {
      return new Promise((resolve) => {
        let confirmed = window.confirm(msg);
        resolve(confirmed);
        return;
      })
    }
    socket.on('alerts', data => {
      confirmDialog(data).then(data => {
        console.log(data);
        socket.emit('userAnswer', data);
      });
    });
  }

我应该使用socket.id-我的连接ID

io.sockets.connected[socket.id].once('userResponce', handler);

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM