Проблема в том, что если данные не получены при первой попытке, то 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 для других опций).
Поблагодарили бы комментарий, если вы думаете, что ответ должен быть улучшен, чтобы получить голос, THX! – Schollii