Function LUA-从回调中获取变量

Function LUA-从回调中获取变量,function,http,lua,callback,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

我是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
local API_KEY=“”
函数getAPIKey()
本地密钥
http.get(SERVER_URL..?query=getapikey&mac=“…wifi.ap.getmac(),
功能(代码、数据)
如果(代码<0),则
打印(“HTTP请求失败”)
其他的
键=数据
结束
(完)
打印(键)
结束
当我尝试这段代码时,我会得到一个错误,因为可用的
API\u键是
nil


有人有什么想法吗?

可能是问题1:您没有收集http.get()返回的主体,因此打印了一个空的局部变量

可能问题2:
API\u KEY
在代码中未使用,因此不会对任何内容产生任何影响。但是,将其设置为全局的
API_KEY=“”
(删除本地)可能会对已加载的某些库产生影响-在本例中,无论您从中获得了什么http.get。如果是这种情况,您可能需要查阅文档/从API获取API密钥(通常用于防止任何人使用API)

也许问题3:不过我有一个顾虑,那就是匿名函数中的
code<0
。通常http将返回一个
code>0
(未签名):
200
表示正常,
404
表示未找到,
403
表示禁止,
300
中的任何内容都与重定向有关,这可能需要您做更多的工作。有关http代码参考,请参阅。也许通过函数返回的数据实际上是预期的数据。如果是这种情况(你会从错误代码中知道),那么我会删除
key=data
print(data)

可能的解决办法1:

-    local API_KEY = ""
+    API_KEY = ""
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
可能的解决办法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
函数getAPIKey() -本地密钥 -http.get(SERVER_URL..?query=getapikey&mac=“…wifi.ap.getmac(), +local key=http.get(SERVER_URL..?query=getapikey&mac=“…wifi.ap.getmac(), 功能(代码、数据) 如果(代码<0),则 打印(“HTTP请求失败”) 其他的 键=数据 结束 (完) 打印(键) 结束
调试解决方案1:

-    local API_KEY = ""
+    API_KEY = ""
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
函数getAPIKey() 本地密钥 http.get(SERVER_URL..?query=getapikey&mac=“…wifi.ap.getmac(), local key=http.get(SERVER_URL..?query=getapikey&mac=“…wifi.ap.getmac(), 功能(代码、数据) 如果(代码<0),则 -打印(“HTTP请求失败”) +打印(“HTTP请求失败!”,“`code..`”) +打印(“数据:”、“`.”数据..“`”) 其他的 +打印(代码,“`.”数据..“`”) 键=数据 结束 (完) 打印(键) 结束
您从未分配过API\u密钥。您想在哪里使用它?也许您想要
local KEY=http.get(…)
。我现在有一个完全相同的问题,因为http.get回调函数的调用要晚得多,所以我的密钥总是为零。所以问题可能是:如何获取回调函数的值。有人找到了解决方案吗?嘿,谢谢你的详细解释。我尝试了两种可能的解决方案,但我仍然没有找到即使我尝试在函数末尾进行输出,也会得到相同的错误。有人知道吗?http.get将始终返回nil,因此此解决方案无法工作。。