Node.js 如何处理nodejs/node-red中的事件
我使用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
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。这个问题对更大的社区没有好处。我同意,但询问更多信息肯定会更好。我注意到节点红色的问题答案很少,但通常有很多评论。这看起来不太好&这让人们很难找到明确的答案,所以我的评论更为笼统,真的,很抱歉给你带来了困惑。