【问题标题】:socket.emit and wait until user response after that resolve promisesocket.emit 并等到用户响应之后解决承诺
【发布时间】:2018-11-14 10:52:51
【问题描述】:

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

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

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

【问题讨论】:

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


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 2018-02-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-06-24
      • 2019-04-13
      • 2018-04-02
      相关资源
      最近更新 更多