function - LUA - 从回调中获取变量

标签 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:您没有收集 http.get() 返回的正文,因此打印了一个空的局部变量。

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

也许是问题 3:不过,我有一个担忧,它是 code < 0在匿名函数中。通常 http 会返回一个 code > 0 (未签名):200表示好的,404表示未找到,403表示禁止,以及 300 中的任何内容与重定向有关,这可能需要您做更多的工作。参见 this wiki http代码引用。也许通过函数返回的数据实际上是预期的数据。如果是这种情况(你会通过错误代码知道),那么我会删除 key = data对于 print(data) .

可能的解决方案一:

-    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

关于function - LUA - 从回调中获取变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48875841/

相关文章:

c++ - 如何在递归函数中更改数字的数字? C++

lua - 在 Torch 中可视化神经网络层,无需 itorch

function - 如何为函数/过程创建别名?

java - 链表 - insert before 方法会导致链表永远持续下去

http - 为什么我的代码需要这么长时间才能返回结果?

http - 使搜索 URL 搜索引擎友好 : hash -> what?

c++ - 如何在 boost::asio 服务器中使用端口 80?

android - 任何优秀的文本编辑器 - Android 应用程序 - 为程序员优化?

c# - import_type 尝试调用全局

ios - 在 Swift 中将函数作为字符串调用