在Meteor中包装异步NPM
我正在使用meteor npm在我的meteor应用程序中使用npm。我已成功添加serialport和xbee api。我可以使用console.log读取xbee帧,但无法将帧传递给Meteor方法。下面的代码给出了一个关于NPM函数和使用bindEnvironment的错误。我确信这与Meteor运行同步与XbeeAPI运行异步有关。我对Meteor相当熟悉,但对NPM不太熟悉。我相信答案可能是肯定的。我真的不需要回调,因为我只需要将帧数据传递给一个方法,然后从那里处理它。有人能帮我解释一下吗?提前谢谢在Meteor中包装异步NPM,meteor,npm,Meteor,Npm,我正在使用meteor npm在我的meteor应用程序中使用npm。我已成功添加serialport和xbee api。我可以使用console.log读取xbee帧,但无法将帧传递给Meteor方法。下面的代码给出了一个关于NPM函数和使用bindEnvironment的错误。我确信这与Meteor运行同步与XbeeAPI运行异步有关。我对Meteor相当熟悉,但对NPM不太熟悉。我相信答案可能是肯定的。我真的不需要回调,因为我只需要将帧数据传递给一个方法,然后从那里处理它。有人能帮我解释一
//加载serialport和xbee api
var serialport=Meteor.require('serialport');
var SerialPort=SerialPort.SerialPort;
var xbee_api=Meteor.require('xbee-api');
//加载常量以帮助记忆XBEE的十六进制代码
var C=xbee_api.常数;
//创建xbee
var xbee=新的xbee_api.XBeeAPI({
api_模式:2
});
//创建串行端口
var serialPort=new serialPort('/dev/tty.usbserial-A901L66E'{
波特率:9600,
//随xbee api提供。可以使用com.parsers.raw并将其提供给xbee api
解析器:xbee.rawParser()
});
//连接串行端口时要执行的设置操作
serialPort.on('open',function(){
console.log(“端口打开”);
});
//收到xbee数据包时要采取的设置操作
//每次接收到完整的xbee数据包时,xbee.rawParser都会发出frame_对象
xbee.on('frame_object',函数(frame){
//发送帧到流星方法
Meteor.call('xbeeIncoming',帧);
//console.log(“>>”,frame);
});
流星方法定义:
Meteor.methods({
XBEE输入:功能XBEE输入(帧){
console.log('xbeeData');
//var xbeeSenderAddr=frame.addr
}
});
为什么要使用方法来执行此操作。如果两者都在服务器端,则可以使用私有方法,即
xbeeIncoming = function(frame) {
console.log('xbeeData');
}
而不是Meteor.call('xbeeinoming',frame)
您可以使用xbeeinoming(frame)代码>
您需要在bindEnvironment中包装来自xbee的回调(前提是它可以序列化为JSON/EJSON):
从这个角度来看,Meteor.call
应该可以像预期的那样工作这工作非常好!我可以简单地使用“私有方法”,完全避免Meteor.bind环境。
var onFrame = function(frame ) {
Meteor.call('xbeeIncoming', frame);
//console.log('>>',frame);
}
xbee.on('frame_object', Meteor.bindEnvironment(onFrame));