从node.js中的.then()内部调用websocket发送函数

时间:2018-12-11 14:38:26

标签: node.js websocket promise

我有一个承诺,可以使用一些配置数据来解析JSON对象。我想在HTML客户端中按下“发送配置”按钮后访问此数据。通过nodejs中的websocket连接完成通信。因此,websocket服务器从客户端接收到一条消息,提示“发送配置”,并且服务器应该以配置响应。

代码:

  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'”

1 个答案:

答案 0 :(得分:0)

您有两个问题,一个是应该使用:

grant codeBase "file:/C:/somepath/api/" {
    ...
};

另一个是:

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++) { (如果您使用的是支持ES5以上的最新节点),则应该这样做。您将必须使用这样的IIFE:

let