0

我正在使用 Python 为 Arduino 开发一个 Web 界面。对于自动更新和显示,我使用 JSON。我有一个非常有趣的问题。

如果存在命令,则以下代码将命令发送到 python 函数。然后,无论是否向函数发送了命令,该函数都会通过调用另一个函数来检查来自 Arduino 的更新。

这是我找不到任何解释的原因:在 update() 函数的第一个也是唯一一个条件中,如果我删除了 alert('hey'); 不再调用python函数。但是如果我写了 alert('hey'); 在 JSON 请求之后,它工作正常,调用该函数并且 arduino 获取消息。

任何人都知道为什么?

function update(command=0) {

    // if a command is passed, send it

    if (command!=0) {
        $.getJSON('/action?command='+command);
        alert('hey'); // if I remove this, the action function is not called. Why?
    }

    // read from the read function, no matter what

    $.getJSON('/read', {}, function(data) {
        if (data.state != 'failure' && data.content != '') {
            $('.notice').text(data.content);
            $('.notice').hide().fadeIn('slow');
            setTimeout(function () { $('.notice').fadeOut(1000); }, 1500);
        }
        setTimeout(update, 5000); // next update in 5 secs
    });
}

update(); // for the first call on page load
4

1 回答 1

0

您是否使用第二个命令检查第一个命令的结果?如果是这样,我怀疑alert('hey')暂停执行的时间足够长,以便第一个完成。你可以尝试让你的 read 成为第一个getJSON的回调函数吗?

function update(command=0) {

    if (command!=0) {
        $.getJSON('/action?command='+command, function() {
            read();
        });
    } else {
        read();
    }
}

function read() {
    $.getJSON('/read', {}, function(data) {
        if (data.state != 'failure' && data.content != '') {
            $('.notice').text(data.content);
            $('.notice').hide().fadeIn('slow');
            setTimeout(function () { $('.notice').fadeOut(1000); }, 1500);
        }
        setTimeout(update, 5000); // next update in 5 secs
    });
}

update(); // for the first call on page load

这是一个小提琴

于 2013-06-21T11:57:45.007 回答