--- Обобщенная асинхронная функция --- --- Использование в общих чертах выглядит так: --- ```lua --- local multiplyByTwoCallback = nil --- local n = nil --- local function multiplyByTwoAsync(number) --- -- императивно сохраняем/обрабатываем параметр --- n = number --- return function(callback) -- это функция, которая запускает задачу --- multiplyByTwoCallback = callback --- end --- end --- --- local function update(dt) --- --- ждем нужного момента времени... --- --- if multiplyByTwoCallback then -- завершаем вычисление --- local result = n * 2 --- multiplyByTwoCallback(result) -- результат асинхронного вычисления идет в параметр коллбека! --- multiplyByTwoCallback = nil --- end --- end --- --- --- --- потом это можно вызывать так: --- local task = multiplyByTwoAsync(21) --- -- это ленивое вычисление, так что в этот момент ничего не произойдет --- -- запускаем --- task( --- function(result) print(result) end -- выведет 42 после завершения вычисления, т.е. аналогично `task.then((res) => print(res))` на JS --- ) --- --- ``` --- @generic T --- @alias Task fun(callback: fun(value: T): nil): nil