LUA - 从回调中获取变量

我是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请求失败")
            else
                key = data
            end
        end)
    print(key)
end

当我运行这个代码时,我会得到一个错误,因为变量 API_KEYnil

是否有人有一些想法?

点赞
用户2262111
用户2262111

可能存在问题 1:您没有收集 http.get() 返回的正文,因此打印一个空的本地变量。

可能存在问题 2:API_KEY 在您的代码中未被使用,因此它对任何内容都没有影响。然而,将 API_KEY = ""(删除局部变量标识)以使其变成全局可能会影响已经加载的某些库 - 在这种情况下是您从中得到 http.get 的内容。如果是这种情况,您可能需要查阅文档或从 API 获取一个 API 密钥(通常用于防止任何人使用 API)。

可能存在问题 3:我有一个担忧,它涉及匿名函数中的 code < 0。通常情况下,http 将返回一个 code > 0(无符号):200 表示 OK,404 表示未找到,403 表示禁止访问,而 300 的任何内容都与重定向有关,这可能需要更多的工作。有关 http 状态代码的参考,请参见 此 wiki。也许通过函数返回的数据实际上是预期的数据。 如果是这种情况(您将通过错误代码知道),那么我将删除 key = data,只打印 data

可能的解决方案 1:

-    local API_KEY = ""
+    API_KEY = ""

可能的解决方案 2:

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

调试解决方案 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")
+               print("HTTP request failed!", "`" .. code .. "`")
+               print("data:", "`" .. data .. "`")
            else
+               print(code, "`" .. data .. "`")
                key = data
            end
        end)
    print(key)
end
2018-02-20 03:54:07