Node.js 如何处理nodejs/node-red中的事件

Node.js 如何处理nodejs/node-red中的事件,node.js,events,asynchronous,node-red,Node.js,Events,Asynchronous,Node Red,我使用node red开发了一个自定义节点,用于连接到设备并从中请求数据 function query(node, msg, callback) { var uri = 'ws://' + node.config.host + ':' + node.config.port; var protocol = 'Lux_WS'; node.ws = new WebSocket(uri, protocol); var login = "LOGIN;" + node.c

我使用node red开发了一个自定义节点,用于连接到设备并从中请求数据

function query(node, msg, callback) {

    var uri = 'ws://' + node.config.host + ':' + node.config.port;
    var protocol = 'Lux_WS';
    node.ws = new WebSocket(uri, protocol);

    var login = "LOGIN;" + node.config.password;

    node.ws.on('open', function open() {
        node.status({fill:"green",shape:"dot",text:"connected"});
        node.ws.send(login);
        node.ws.send("REFRESH");
    }); 

    node.ws.on('message', function (data, flags) {
        processResponse(data, node);
    }); 

    node.ws.on('close', function(code, reason) {
        node.status({fill:"grey",shape:"dot",text:"disconnected"});
    }); 

    node.ws.on('error', function(error) {
        node.status({fill:"red",shape:"dot",text:"Error " + error});
    }); 

}   
processResponse
函数中,我需要处理第一个响应。它为我提供了一个包含多个ID的XML,我需要这些ID来请求进一步的数据。 我计划建立一个结构来保存第一个请求中的所有数据,并用id请求产生的数据进一步填充它

这就是我的问题开始的地方,每当我从
processResponse
函数中发送一个查询时,我就会触发一个事件,导致同一个函数再次被调用,但我的结构是空的

我知道这是由于nodejs和事件系统的异步特性造成的,但我不知道如何避免这种行为或以正确的方式编写代码


如果有人能举出一些例子来说明如何处理类似的情况,或者更好地举出一个例子,那就太好了

两个字,陈述machine@hardillb如果我们为StackOverflow上的Node RED建立了一组有用的答案,那就太好了,因为这会让新用户更容易学习。@Juliannight在这个问题中没有足够的信息来写一个正确的答案(如果有的话,我们基本上会写整个节点)。提示去研究状态机似乎已经达到了预期效果,因为OP没有响应。这也是一个普通的NodeJS问题,刚好被标记为Node RED。这个问题对更大的社区没有好处。我同意,但询问更多信息肯定会更好。我注意到节点红色的问题答案很少,但通常有很多评论。这看起来不太好&这让人们很难找到明确的答案,所以我的评论更为笼统,真的,很抱歉给你带来了困惑。