вызов функции отправки websocket из .then () в nodejs - PullRequest
0 голосов
/ 11 декабря 2018

У меня есть обещание, которое разрешает объект JSON с некоторыми данными конфигурации.я хочу получить доступ к этим данным после нажатия кнопки «отправить конфигурацию» в моем HTML-клиенте.связь осуществляется через соединение websocket в nodejs.поэтому сервер веб-сокетов получает сообщение «отправить конфигурацию» от клиента, и сервер должен ответить с помощью конфигурации.

код:

  showMsg = function (MSGOBJ) { 
            var parsedOBJ = JSON.parse(MSGOBJ);

            //console.log(parsedOBJ.content);
            for (var i = 0; i < connections.length; i++) {
            switch(parsedOBJ.type) {
      case "text":
         console.log("Received: " + parsedOBJ.content)

         connections[i].sendUTF('{ "type":"text", "content":"Server ready."}')
         break;

      case "config":

         console.log("Received:1 " + parsedOBJ.content)          
         console.log("Sending config" )

         var getConfig = KRequests.getKConfig;

         var configOBJ;

         getConfig.then(function(result) {
            configOBJ = result
         });

         connections[i].send('{ "type":"config", "content":'+JSON.stringify(configOBJ)+'}');

         break; 
        }
     }
 }

я знаю, что configOBJ был бы неопределенным, если бы я использовал его вне цепочки, но просто чтобы дать вам представление о том, что я хочу сделать.а также, если я переместлю send () внутри цепочки, это вызовет такую ​​ошибку: «UnhandledPromiseRejectionWarning: TypeError: Невозможно прочитать свойство 'send' of undefined"

1 Ответ

0 голосов
/ 11 декабря 2018

У вас есть два вопроса, один из которых вы должны использовать:

getConfig.then(function(result) {
  console.log(connections[i])
  connections[i].send('{ "type":"config", "content":'+JSON.stringify(configOBJ)+'}');
});

Другой:

for (var i = 0; i < connections.length; i++) {

должно быть:

for (let i = 0; i < connections.length; i++) {

Илиесли у вас нет let, который вы должны использовать, если вы используете недавний узел, который поддерживает больше, чем ES5.Вам придется использовать IIFE, как это:

for (var i = 0; i < connections.length; i++) {
  (function (i) {
    // put the loop body here
  })(i);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...