我想从客户端(AR.Drone 2.0)获取数据一次,然后将它存储在要打印的变量中。我用过:
client.on('navdata', console.log);
但是,当我执行此命令时,数据会被多次打印,我必须停止脚本才能停止此过程。如何只获取一次数据并将其存储在变量中。
答案 0 :(得分:2)
客户端对象继承 EventEmitter ,因此您应该只能使用once()
来监听 navdata 事件一次。要将发射的值存储到变量,您可以执行以下操作:
var _navData;
// ...
client.once('navdata', function (navData) {
_navData = navData;
});
<强>更新强>
关于您的comment,我建议您声明一个将 navdata 对象作为参数的函数,并将该函数传递给client.once()
:
var doSomethingWithNavData = function doSomethingWithNavData(navData) {
console.log(navData);
// do what ever you want to do with navData...
}
client.once('navdata', doSomethingWithNavData);
答案 1 :(得分:1)
有两种用于添加侦听器的EventEmitter方法:.on()
和.once()
。
.on()
主动侦听并捕获事件,直到调用.removeListener()
或.removeAllListeners()
来移除侦听器。.once()
听取下一个活动,自动删除(有效地运行),除非.removeListener()
或.removeAllListeners()
被调用以删除它。