LUA - 从回调中获取变量

时间:2018-02-19 23:43:57

标签: function http lua callback

我是LUA编码的新手并且遇到了第一个问题:

我尝试创建一个http.get请求,并希望将内容转换为变量。这是我的代码:

local API_KEY = ""

function getAPIKey()
    local key
    http.get(SERVER_URL .. "?query=getapikey&mac=" .. wifi.ap.getmac(), 
        function(code, data)
            if(code < 0) then
                print("HTTP request failed")
            else
                key = data
            end
        end)
    print(key)
end

当我尝试使用此代码时,我会收到错误,因为可变API_KEYnil

有人有想法吗?

1 个答案:

答案 0 :(得分:0)

也许问题1:你没有收集http.get()返回的正文,因此打印一个空的局部变量。

也许问题2:API_KEY在您的代码中未使用,因此不会对任何内容产生任何影响。但是,API_KEY = ""(删除本地)使其全局化可能会对已加载的某个库产生影响 - 在这种情况下,无论您从哪里获得http.get。如果是这种情况,您可能需要查找文档/从API获取API密钥(通常用于防止任何人使用API​​)。

也许问题3:我有一个问题,在匿名函数中有code < 0。通常http会返回code > 0(未签名):200表示正常,404表示未找到,403表示禁止,以及300中的任何内容39; s与重定向有关,这可能需要你做更多的工作。有关http代码参考,请参阅this wiki。也许通过该函数返回的数据实际上是预期的数据。如果是这种情况(并且您已通过错误代码知道),那么我会删除key = data的{​​{1}}。

可能的解决方案1:

print(data)

可能的解决方案2:

-    local API_KEY = ""
+    API_KEY = ""

调试解决方案1:

function getAPIKey()
-   local key
-   http.get(SERVER_URL .. "?query=getapikey&mac=" .. wifi.ap.getmac(),
+   local key = http.get(SERVER_URL .. "?query=getapikey&mac=" .. wifi.ap.getmac(),
        function(code, data)
            if(code < 0) then
                print("HTTP request failed")
            else
                key = data
            end
        end)
    print(key)
end