/
spirzen
/
it-code-examples
Обзор
Документация
Войти
/
spirzen
/
it-code-examples
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
Аналитика
Безопасность
master
examples/lua/lua-515-23-007/main.lua
50 строк
2 KB
Spirzen
Code migration pack
09 июн 2026, 01:41
09 июн 2026, 01:41
cebc284
Код
Авторство
О чём код?
-- ModuleScript: Promise.luau export type Promise<T> = { andThen: <U>(self: Promise<T>, (T) -> U | Promise<U>) -> Promise<U>, catch: (self: Promise<T>, (string) -> T) -> Promise<T>, await: (self: Promise<T>) -> T, } local Promise = {} Promise.__index = Promise function Promise.new<T>(executor: (resolve: (T) -> (), reject: (string) -> ()) -> ()) local self = setmetatable({ _state = "pending" :: "pending" | "fulfilled" | "rejected", _value = nil :: T?, _reason = nil :: string?, _onFulfilled = {} :: { (T) -> () }, _onRejected = {} :: { (string) -> () }, }, Promise) local function resolve(value: T) if self._state ~= "pending" then return end self._state = "fulfilled" self._value = value for _, cb in self._onFulfilled do task.spawn(cb, value) end end local function reject(reason: string) if self._state ~= "pending" then return end self._state = "rejected" self._reason = reason for _, cb in self._onRejected do task.spawn(cb, reason) end end task.spawn(executor, resolve, reject) return self end -- Реализация andThen, catch, await — опущена для краткости, но доступна в open-source библиотеках (например, NevermoreEngine) -- Использование: local p = Promise.new(function(resolve, reject) task.delay(1, function() resolve("done") end) end) p:andThen(function(result) print(result) -- "done" return result .. " and processed" end):andThen(print) -- "done and processed"