失败时调用的成功回调函数。可能的错误?

Posted

技术标签:

【中文标题】失败时调用的成功回调函数。可能的错误?【英文标题】:Success callback function called on failure. Possible bug? 【发布时间】:2019-06-15 08:06:07 【问题描述】:

我正在做一个小项目,使用带有 NodeMCU 和 Lua 的 ESP8266。我怀疑我发现了一个错误,但由于我是 Lua 的新手(另外两个也是!),我希望能得到一些帮助来确认我是否正确,或者我是否遗漏了什么(更多可能!)。

NodeMCU 固件包含一个内置的 SNTP 客户端模块,可将同步时间更新为系统时钟(rtctime 模块)。成功回调函数似乎在 NTP 同步失败时(或可能之前)被调用。例如,如果 wifi 未连接,或者有时在启动后第一次同步尝试(连接 wifi)时,就会发生这种情况。根据文档,如果当前时间不可用, rtctime.get() 将返回零;这是我得到的结果,进一步表明 NTP 同步没有成功。我无法弄清楚为什么此时调用成功函数,在失败函数之前或代替失败函数(如我所料)。

我指的 sntp 模块在这里 - 不幸的是,C 源代码有点让我头疼:https://nodemcu.readthedocs.io/en/master/en/modules/sntp/

我的(最小)代码:

-- Define callback function for ntp sync success
function ntpSyncSuccess (sec, usec, server, info)
    print('SNTP time sync successful!')
    print("rtctime.get() returns: ", rtctime.get())
end

-- Configure and start NTP time sync with auto repeat enabled
sntp.sync("0.au.pool.ntp.org",
    ntpSyncSuccess(sec, usec, server, info),   --success callback
    function()          -- error callback
        print('SNTP time sync failed!')
    end,
    1 -- enable autorepeat (SNTP sync every 1000 seconds (~17 min))
)

启动设备并运行代码时的串行输出结果(注意最后的第 2 行和第 3 行):

NodeMCU custom build by frightanic.com
    branch: master
    commit: 11592951b90707cdcb6d751876170bf4da82850d
    SSL: false
    modules: cron,file,gpio,i2c,net,node,rotary,rtctime,sntp,struct,tmr,uart,wifi
 build created on 2019-01-16 03:11
 powered by Lua 5.1.4 on SDK 2.2.1(6ab97e9)
lua: cannot open init.lua
> print(uart.setup(0, 115200, 8, 0, 1, 1 ))
115200
> dofile("ntpTest.lua")
SNTP time sync successful!
rtctime.get() returns:  0   0   0
> SNTP time sync failed!

【问题讨论】:

对我来说似乎是个错误。 谢谢,这让人放心。也许我当时写的没有明显的问题。 【参考方案1】:

只是为了让我们可以在此处“关闭”此 Q(一旦您接受答案)。它必须是函数引用而不是函数调用。

sntp.sync("0.au.pool.ntp.org",
    ntpSyncSuccess,     -- no (), no parameters
    function()          -- error callback

【讨论】:

谢谢,测试了修改后的代码,它可以工作。我至少在这里学到了一些东西。

以上是关于失败时调用的成功回调函数。可能的错误?的主要内容,如果未能解决你的问题,请参考以下文章

从C ++代码成功进行C#回调后,“运行时检查失败#0 - ESP的值未在函数调用中正确保存”

回调中的 RMI 连接失败检测

ajax的另一种成功和失败回调函数

Jquery成功函数未使用JSONP触发

09 promise then

“运行时检查失败 #0 - ESP 的值未在函数调用中正确保存”从 C++ 代码成功 C# 回调后