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

时间:2017-04-30 11:14:43

标签: node.js events asynchronous node-red

我使用node-red并在使用websockets连接到设备并从中请求数据时开发自定义节点。

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请求产生的数据进一步填充它。

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

我知道这是由于nodejs和事件系统的异步性质,但我根本没有看到如何绕过这种行为或以正确的方式执行我的代码。

如果有人可以推荐如何处理这类情况的例子,或者甚至更好的举例,那就太棒了!

0 个答案:

没有答案