socket.emit并等到用户响应后解析promise

时间:2018-06-05 04:05:13

标签: javascript node.js reactjs socket.io promise

我正在编写控制硬件的网络应用程序。我有一台服务器通过串口与设备通信。除了与用户的互动外,一切都有效。该设备有寄存器,我反复要求等待一些值。如果有一些值,我会向客户端发出一个事件并出现确认框。用户选择简历或中止。在该客户端发出响应(true或false)之后,我想在promise函数中解决此响应。我需要在函数中准确地捕获用户的响应,因为我需要执行一系列操作。承诺后的承诺。似乎我的功能在用户回答之前结束。如何解决这个问题?

这是我在服务器上的代码:

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);
    })
  }

这是我在客户端的代码:

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);
      });
    });
  }

1 个答案:

答案 0 :(得分:0)

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

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