Javascript 回调get函数与事件驱动设计相结合
我想制作一个带有get函数的API(node.js)。我使用的模块支持写操作,所有传入的数据都由我也可以订阅的事件发出。底层系统基于轮询 但我还想添加写入的轮询器(使用setInterval)。当我添加一个请求rpm的侦听器时,我每秒都会得到rpm信息。当我同时调用vss的get时,data.name和type可能不匹配。现在这把我的计划搞砸了 那么,基本上,我可以在else块中填充什么,什么是最佳实践?或者这整个设计是一个糟糕的做法?在这种情况下是否应该不支持getJavascript 回调get函数与事件驱动设计相结合,javascript,node.js,listener,event-driven,Javascript,Node.js,Listener,Event Driven,我想制作一个带有get函数的API(node.js)。我使用的模块支持写操作,所有传入的数据都由我也可以订阅的事件发出。底层系统基于轮询 但我还想添加写入的轮询器(使用setInterval)。当我添加一个请求rpm的侦听器时,我每秒都会得到rpm信息。当我同时调用vss的get时,data.name和type可能不匹配。现在这把我的计划搞砸了 那么,基本上,我可以在else块中填充什么,什么是最佳实践?或者这整个设计是一个糟糕的做法?在这种情况下是否应该不支持get function get(
function get(type, callback) {
sp.once('dataReceived', function (data) {
if(data.name === type) {
switch (data.name) {
case "rpm":
callback(new RPMEvent(data.value));
break;
case "vss":
callback(new SpeedEvent(data.value));
break;
default:
console.log('Not supported yet.');
break;
}
} else {
console.log('Collision with poller and get. Not supported yet.');
//What to do here? I should addlistener again?
}
});
sp.requestValueByName(type);
}
“dataReceived”事件可以发出更多,因为轮询器使用不同的变量(rpm/vss)。如何为get获取正确的值
我想得越久,就越不应该支持get函数,因为这个dataReceived事件也是由轮询器触发的。解决了它。当存在匹配项时,我将删除侦听器,并且不再使用它
function get(type, callback) {
var getMessageHandler = function (data) {
if(data.name === type) {
switch (data.name) {
case "rpm":
callback(new RPMEvent(data.value));
break;
case "vss":
callback(new SpeedEvent(data.value));
break;
default:
console.log('Not supported yet.');
break;
}
this.removeListener('dataReceived', getMessageHandler);
} else {
console.log('Collision with listener and get. Not supported yet.');
//Do nothing, let the next thing come in. Will be caught by generalHandler.
}
};
sp.on('dataReceived', getMessageHandler);
//Request value after callback.
sp.requestValueByName(type);
}