Проблема в том, что если данные не были получены с первой попытки, то k равно нулю, и тест возвращается. receiveData
будет вызываться снова с интервалом в 100 миллисекунд, пока не будут получены данные, но возврат отбрасывается с помощью PerformWithDelay, и к тому времени возвращается test
(см. первое предложение этого ответа).
Решение состоит в том, чтобы установить обратный вызов, который receiveData
может вызвать, когда данные в конечном итоге поступят. Затем обратный вызов может обрабатывать данные. Замените return l,e
на onReceiveData(l,e)
и сделайте то, что ожидает тест в цикле while
. Конечно, receiveData
может напрямую установить этот флаг, отслеживаемый тестом, но как только ваше приложение станет больше, хорошей идеей будет отделить получение от процесса.
function receiveData()
...
-- then:
local data = nil
function onReceiveData(l,e)
data = l
print('ready to process data', data, e)
end
funtion test()
receiveData()
while data == nil do sleep(100) end
print('data received and processed')
end
test()
где sleep(100)
— это то, что вы можете придумать, поскольку нет встроенной функции, которая делает это в Lua или даже в Corona (хотя в Corona есть system.getTimer()
, которая возвращает мс с момента запуска приложения, так что вы могли бы иметь
function sleep(ms)
local start = system.getTimer()
while system.getTimer() - start < ms do
end
end
Мне не очень нравится пустой цикл while, но в тестовой служебной функции все в порядке. Если вы используете библиотеку сокетов, у нее есть функция сна — прочтите Lua wiki, чтобы узнать о других функциях. опции).
04.10.2014