Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/meteor/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Meteor中包装异步NPM_Meteor_Npm - Fatal编程技术网

在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不太熟悉。我相信答案可能是肯定的。我真的不需要回调,因为我只需要将帧数据传递给一个方法,然后从那里处理它。有人能帮我解释一

我正在使用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));