【问题标题】:LUA - Get Variable from CallbackLUA - 从回调中获取变量
【发布时间】:2018-07-30 06:13:17
【问题描述】:

我是 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

有人有什么想法吗?

【问题讨论】:

  • 您从未分配过您的 API_KEY。你想在哪里使用它?
  • 也许你想要local key = http.get(...)
  • 我现在也有同样的问题,因为 http.get 回调函数在很久以后才被调用,所以关键总是 nil。所以问题类似于:如何获取回调函数的值。有人找到解决方案了吗?

标签: function http lua callback


【解决方案1】:

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

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

也许问题 3:不过,我有一个问题,它在匿名函数中是 code &lt; 0。通常 http 会返回一个code &gt; 0(无符号):200 表示 OK,404 表示未找到,403 表示禁止,300 中的任何内容都与重定向有关,这可能需要更多从你那里工作。有关 http 代码参考,请参阅 this wiki。也许通过函数返回的数据实际上是预期的数据。如果是这种情况(您会通过错误代码知道),那么我将删除 key = dataprint(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

调试方案一:

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

【讨论】:

  • 您好,感谢您非常详细的解释。我已经尝试了两种可能的解决方案,但即使我尝试在函数末尾进行输出,我仍然会遇到相同的错误。有人有想法吗?
  • http.get 将始终返回 nil,因此此解决方案无法正常工作..
猜你喜欢
  • 1970-01-01
  • 2012-06-15
  • 1970-01-01
  • 1970-01-01
  • 2018-05-24
  • 2012-06-05
  • 1970-01-01
  • 1970-01-01
  • 2014-12-22
相关资源
最近更新 更多