使用 Corona SDK Lua 的 network.request 引起的延迟。

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

原文链接 https://stackoverflow.com/questions/8802269

点赞
stackoverflow用户7602
stackoverflow用户7602

将下面翻译成中文并且保留原本的 markdown 格式:

HTTP 调用是异步的,这意味着你的 print(data) 函数几乎总是为空的,即使在不好的情况下,performWithDelay 函数也可能为空。

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

这需要一些思考和重新设计,但并不是很难。

2012-01-10 13:27:05
stackoverflow用户2409015
stackoverflow用户2409015

你也可以在发送请求到服务器时调用 native.setActivityIndicator(true),并在 event.response 中停止指示器(native.setActivityIndicator(false))。因此,当你从服务器获得响应时,就可以进行自己的操作了。

2014-03-19 10:57:55
stackoverflow用户3041972
stackoverflow用户3041972

最简单的方法是发出请求并弹出一个新按钮,然后使用数据执行需要执行的操作,许多好的网站都这样做。

你也可以使用 event.phase == "ended",但不确定它的效果如何。

2015-04-06 06:19:16