我正在编写程序以从飞行控制器获取值,然后使用这些值与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()行仍将显示未定义。就像在网上订购披萨一样,直到它出现在您的房子里,您才可以吃它。

10-05 20:54
查看更多