我正在编写程序以从飞行控制器获取值,然后使用这些值与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
。谢谢!
最佳答案
在函数中将其声明为参数时,可以在块作用域中重新定义该变量。
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()行仍将显示未定义。就像在网上订购披萨一样,直到它出现在您的房子里,您才可以吃它。