【发布时间】:2017-10-20 05:38:15
【问题描述】:
这可能是一个愚蠢的问题,但是,我不知道发生了什么。
我有一个获取谷歌时间的简单脚本,我需要将它设置为time 全局变量。因此,在receive 事件中,我打印了获取的时间并且它工作正常。
问题是变量time 在事件外调用时总是为空。代码如下:
-- test.lua
time = ""
function getTime()
conn = net.createConnection(net.TCP, 0)
conn:connect(80,'google.com')
conn:on("connection", function(conn, payload)
conn:send("HEAD / HTTP/1.1\r\n"..
"Host: google.com\r\n"..
"Accept: */*\r\n"..
"User-Agent: Mozilla/4.0 (compatible; esp8266 Lua;)"..
"\r\n\r\n"
)
end)
conn:on("receive", function(conn, payload)
conn:close()
time = string.sub(payload,string.find(payload,"Date: ")
+6,string.find(payload,"Date: ")+35)
end)
print("testing: " .. time) -- WORKS!
end
getTime()
print("variable: ".. time)
这是我调用函数的方式(使用 nodemcu-uploader 终端):
➜ test nu terminal
--- Miniterm on /dev/cu.wchusbserial1410 115200,8,N,1 ---
--- Quit: Ctrl+] | Menu: Ctrl+T | Help: Ctrl+T followed by Ctrl+H ---
> dofile('lib/test.lua')
variable:
> testing: Sat, 20 May 2017 01:37:35 GMT
任何帮助将不胜感激! 谢谢
【问题讨论】:
-
当心!这会造成内存泄漏,因为您在
connection和receive回调中重用了conn变量。见stackoverflow.com/a/37379426/131929。 -
@MarcelStör .. 在活动结束时设置为
nil可以解决这个问题吗?