37 lines
1.5 KiB
Lua
37 lines
1.5 KiB
Lua
--- Обобщенная асинхронная функция
|
||
---
|
||
--- Использование в общих чертах выглядит так:
|
||
--- ```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<T> fun(callback: fun(value: T): nil): nil
|