我正在编写一个程序来从飞行控制器获取值,然后使用这些值与HUD进行交互。我面临的问题是我无法从飞行控制器功能中获取变量并将其传递给HUD功能。我试过window
没有运气,尝试嵌套功能,以及我在网上找到的其他东西 - 没有一个有效。任何帮助将非常感激。这是代码 -
这是从飞行控制器中提取数据的部分 -
var roll_in;
listenerImu.subscribe(function(message, roll_in) {
roll_in = (message.twist.linear.x) * (-57.2958);
return roll_in;
});
将数据放入roll_in
后,需要将其放入此函数 -
function FlightIndicator(placeholder, type, options) {
var attitude = this;
var settings = $.extend({
size: 500,
roll: roll_in, // Vehicle Roll
pitch: pitch_in, // Vehicle Pitch
turn: 0,
heading: 0,
vario: 0,
airspeed: 0,
altitude: 0,
pressure: 1000,
showBox: false,
img_directory: 'jQuery-Flight-Indicators-master/img/'
},
options);
}
即使我在console.print(roll_in)
函数后面放置listenerImu
,也会打印undefined
。
谢谢!
答案 0 :(得分:2)
当您在函数中将其声明为参数时,可以在块作用域中重新定义该变量。
var roll_in; //global
listenerImu.subscribe(function(message, roll_in) { //creates a new variable here in this block scope
roll_in = (message.twist.linear.x) * (-57.2958); //uses the argument, not global
return roll_in; //this line appears to do nothing
});
您的代码应该是这个
var roll_in;
listenerImu.subscribe(function(message) {
roll_in = (message.twist.linear.x) * (-57.2958);
});
现在下一个问题是subscribe
将是一个异步调用,因此在触发该行之前,变量roll_in
将是未定义的。在它之后添加任何console.log()行仍将显示undefined。这就像在网上订购比萨饼一样,在它出现在你家之前你不能吃它。
答案 1 :(得分:0)
var roll_in;
listenerImu.subscribe(function(message, roll_in) {
roll_in = (message.twist.linear.x) * (-57.2958);
^ This is the parameter roll_in
只需将roll_in
param更改为其他内容。
答案 2 :(得分:0)
如果要将变量分配给外部作用域roll_in,请不要将其作为参数传递给subscribe回调。
var roll_in;
listenerImu.subscribe(function(message) {
roll_in = (message.twist.linear.x) * (-57.2958);
});
当roll_in用作回调中的参数时,该回调中任何分配的内容都会影响参数变量,不会影响外部作用域的roll_in。