【问题标题】:Corona SDK Lua network.request delayCorona SDK Lua network.request 延迟
【发布时间】:2012-02-06 19:19:40
【问题描述】:

我是 Corona SDK 和 Lua 语言的新手,遇到了一些麻烦..

所以我有这个功能,它将网络请求发送到我的站点并通过 json 我接收数据。这很好用。

问题是当我在监听函数外调用带有数据响应的变量时,它似乎是nil。我放了一个小计时器来跟踪问题是否是由于请求和响应之间的时间造成的,并且似乎是那个(但我不确定 100%)。我不想使用自定义延迟来执行此操作。

有什么方法可以暂停脚本直到侦听器响应然后继续执行?我已经尝试过使用协程,但我无法解决它..

local data

function networkListener( event )
    if ( event.isError ) then
        print( "Network error!")
    else
    --print ( "RESPONSE: " .. event.response )

        data = json.decode(event.response)

        print( data[1].start_date ) --working great

    end -- end of else statement
end


network.request( "http://localhost/mysite/myphpmethod" , "GET", networkListener )

print(data) -- error: attempt to index upvalue 'data' ( a nil value ) 

local function printIt()
    print( data[1].start_date)
end

timer.performWithDelay(1000, printIt, 1); -- this works 

【问题讨论】:

    标签: lua coronasdk


    【解决方案1】:

    HTTP 调用是异步的,这意味着您的 print(data) 几乎总是空的,即使 performWithDelay 在糟糕的日子里也可能是空的。

    您必须设计您的应用程序,使游戏代码在 networkListener() 中继续运行(在这种特殊情况下,您将从 networkListener() 调用 printIt()。

    这需要一些思考和重新设计,但还不错。

    【讨论】:

    • 好的,很高兴知道。我的第一个解决方案是在网络侦听器内部,但我认为在外部是可能的。感谢您的回复:)
    【解决方案2】:

    您也可以在向服务器发送请求时调用 native.setActivityIndi​​cator(true) 并停止 event.response 中的指标(native.setActivityIndi​​cator(false))。所以当你得到服务器的响应时,你可以做你的事情。

    【讨论】:

      【解决方案3】:

      最简单的方法是发出请求并弹出一个新按钮,然后您需要对数据执行任何操作,许多优秀的网站都会这样做。 您也可以使用 event.phase == "ended" 但不确定它的效果如何。

      【讨论】:

        猜你喜欢
        • 2015-05-18
        • 1970-01-01
        • 2013-06-04
        • 2014-03-05
        • 2016-04-11
        • 2012-05-08
        • 2013-03-23
        • 2019-06-15
        • 1970-01-01
        相关资源
        最近更新 更多