socket.emit и дождитесь ответа пользователя после этого разрешения обещания - PullRequest
0 голосов
/ 05 июня 2018

Я пишу веб-приложение, которое управляет оборудованием.У меня есть сервер, связанный с устройством через последовательный порт.Все работает, кроме взаимодействия с пользователем.Устройство имеет регистры, которые я неоднократно спрашиваю, ожидая некоторых значений.Если приходят какие-то значения, я отправляю клиенту событие, и появляется окно подтверждения.Пользователь выбирает резюме или прерывание.После этого клиент отправляет ответ (true или false), и я хотел бы разрешить этот ответ в своей функции обещания.Мне нужно поймать ответ пользователя именно в функции, потому что у меня есть последовательность действий, которые мне нужно выполнить.Обещание за обещанием.Кажется, что моя функция заканчивается до того, как пользователь ответит.Как решить эту проблему?

это мой код на сервере:

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 голосов
/ 05 июня 2018

Я должен использовать socket.id - id для моего соединения

io.sockets.connected[socket.id].once('userResponce', handler);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...