mirror of
https://github.com/AmberGraceRblx/luau-promise.git
synced 2025-04-24 15:50:01 +00:00
Format with stylua
This commit is contained in:
parent
81dc283f32
commit
6c38e41422
1 changed files with 56 additions and 86 deletions
142
lib/init.lua
142
lib/init.lua
|
@ -5,7 +5,7 @@
|
||||||
local ERROR_NON_PROMISE_IN_LIST = "Non-promise value passed into %s at index %s"
|
local ERROR_NON_PROMISE_IN_LIST = "Non-promise value passed into %s at index %s"
|
||||||
local ERROR_NON_LIST = "Please pass a list of promises to %s"
|
local ERROR_NON_LIST = "Please pass a list of promises to %s"
|
||||||
local ERROR_NON_FUNCTION = "Please pass a handler function to %s!"
|
local ERROR_NON_FUNCTION = "Please pass a handler function to %s!"
|
||||||
local MODE_KEY_METATABLE = {__mode = "k"}
|
local MODE_KEY_METATABLE = { __mode = "k" }
|
||||||
|
|
||||||
--[[
|
--[[
|
||||||
Creates an enum dictionary with some metamethods to prevent common mistakes.
|
Creates an enum dictionary with some metamethods to prevent common mistakes.
|
||||||
|
@ -34,7 +34,8 @@ end
|
||||||
|
|
||||||
@class Error
|
@class Error
|
||||||
]=]
|
]=]
|
||||||
local Error do
|
local Error
|
||||||
|
do
|
||||||
Error = {
|
Error = {
|
||||||
Kind = makeEnum("Promise.Error.Kind", {
|
Kind = makeEnum("Promise.Error.Kind", {
|
||||||
"ExecutionError",
|
"ExecutionError",
|
||||||
|
@ -100,10 +101,13 @@ local Error do
|
||||||
}
|
}
|
||||||
|
|
||||||
for _, runtimeError in ipairs(self:getErrorChain()) do
|
for _, runtimeError in ipairs(self:getErrorChain()) do
|
||||||
table.insert(errorStrings, table.concat({
|
table.insert(
|
||||||
runtimeError.trace or runtimeError.error,
|
errorStrings,
|
||||||
runtimeError.context,
|
table.concat({
|
||||||
}, "\n"))
|
runtimeError.trace or runtimeError.error,
|
||||||
|
runtimeError.context,
|
||||||
|
}, "\n")
|
||||||
|
)
|
||||||
end
|
end
|
||||||
|
|
||||||
return table.concat(errorStrings, "\n")
|
return table.concat(errorStrings, "\n")
|
||||||
|
@ -200,7 +204,7 @@ end
|
||||||
]=]
|
]=]
|
||||||
local Promise = {
|
local Promise = {
|
||||||
Error = Error,
|
Error = Error,
|
||||||
Status = makeEnum("Promise.Status", {"Started", "Resolved", "Rejected", "Cancelled"}),
|
Status = makeEnum("Promise.Status", { "Started", "Resolved", "Rejected", "Cancelled" }),
|
||||||
_getTime = os.clock,
|
_getTime = os.clock,
|
||||||
_timeEvent = game:GetService("RunService").Heartbeat,
|
_timeEvent = game:GetService("RunService").Heartbeat,
|
||||||
}
|
}
|
||||||
|
@ -273,13 +277,7 @@ function Promise._new(traceback, callback, parent)
|
||||||
end
|
end
|
||||||
|
|
||||||
coroutine.wrap(function()
|
coroutine.wrap(function()
|
||||||
local ok, _, result = runExecutor(
|
local ok, _, result = runExecutor(self._source, callback, resolve, reject, onCancel)
|
||||||
self._source,
|
|
||||||
callback,
|
|
||||||
resolve,
|
|
||||||
reject,
|
|
||||||
onCancel
|
|
||||||
)
|
|
||||||
|
|
||||||
if not ok then
|
if not ok then
|
||||||
reject(result[1])
|
reject(result[1])
|
||||||
|
@ -518,21 +516,18 @@ function Promise._all(traceback, promises, amount)
|
||||||
-- We can assume the values inside `promises` are all promises since we
|
-- We can assume the values inside `promises` are all promises since we
|
||||||
-- checked above.
|
-- checked above.
|
||||||
for i, promise in ipairs(promises) do
|
for i, promise in ipairs(promises) do
|
||||||
newPromises[i] = promise:andThen(
|
newPromises[i] = promise:andThen(function(...)
|
||||||
function(...)
|
resolveOne(i, ...)
|
||||||
resolveOne(i, ...)
|
end, function(...)
|
||||||
end,
|
rejectedCount = rejectedCount + 1
|
||||||
function(...)
|
|
||||||
rejectedCount = rejectedCount + 1
|
|
||||||
|
|
||||||
if amount == nil or #promises - rejectedCount < amount then
|
if amount == nil or #promises - rejectedCount < amount then
|
||||||
cancel()
|
cancel()
|
||||||
done = true
|
done = true
|
||||||
|
|
||||||
reject(...)
|
reject(...)
|
||||||
end
|
|
||||||
end
|
end
|
||||||
)
|
end)
|
||||||
end
|
end
|
||||||
|
|
||||||
if done then
|
if done then
|
||||||
|
@ -718,11 +713,9 @@ function Promise.allSettled(promises)
|
||||||
-- We can assume the values inside `promises` are all promises since we
|
-- We can assume the values inside `promises` are all promises since we
|
||||||
-- checked above.
|
-- checked above.
|
||||||
for i, promise in ipairs(promises) do
|
for i, promise in ipairs(promises) do
|
||||||
newPromises[i] = promise:finally(
|
newPromises[i] = promise:finally(function(...)
|
||||||
function(...)
|
resolveOne(i, ...)
|
||||||
resolveOne(i, ...)
|
end)
|
||||||
end
|
|
||||||
)
|
|
||||||
end
|
end
|
||||||
end)
|
end)
|
||||||
end
|
end
|
||||||
|
@ -769,7 +762,7 @@ function Promise.race(promises)
|
||||||
end
|
end
|
||||||
|
|
||||||
local function finalize(callback)
|
local function finalize(callback)
|
||||||
return function (...)
|
return function(...)
|
||||||
cancel()
|
cancel()
|
||||||
finished = true
|
finished = true
|
||||||
return callback(...)
|
return callback(...)
|
||||||
|
@ -1197,22 +1190,12 @@ function Promise.prototype:_andThen(traceback, successHandler, failureHandler)
|
||||||
|
|
||||||
local successCallback = resolve
|
local successCallback = resolve
|
||||||
if successHandler then
|
if successHandler then
|
||||||
successCallback = createAdvancer(
|
successCallback = createAdvancer(traceback, successHandler, resolve, reject)
|
||||||
traceback,
|
|
||||||
successHandler,
|
|
||||||
resolve,
|
|
||||||
reject
|
|
||||||
)
|
|
||||||
end
|
end
|
||||||
|
|
||||||
local failureCallback = reject
|
local failureCallback = reject
|
||||||
if failureHandler then
|
if failureHandler then
|
||||||
failureCallback = createAdvancer(
|
failureCallback = createAdvancer(traceback, failureHandler, resolve, reject)
|
||||||
traceback,
|
|
||||||
failureHandler,
|
|
||||||
resolve,
|
|
||||||
reject
|
|
||||||
)
|
|
||||||
end
|
end
|
||||||
|
|
||||||
if self._status == Promise.Status.Started then
|
if self._status == Promise.Status.Started then
|
||||||
|
@ -1434,12 +1417,7 @@ function Promise.prototype:_finally(traceback, finallyHandler, onlyOk)
|
||||||
return Promise._new(traceback, function(resolve, reject)
|
return Promise._new(traceback, function(resolve, reject)
|
||||||
local finallyCallback = resolve
|
local finallyCallback = resolve
|
||||||
if finallyHandler then
|
if finallyHandler then
|
||||||
finallyCallback = createAdvancer(
|
finallyCallback = createAdvancer(traceback, finallyHandler, resolve, reject)
|
||||||
traceback,
|
|
||||||
finallyHandler,
|
|
||||||
resolve,
|
|
||||||
reject
|
|
||||||
)
|
|
||||||
end
|
end
|
||||||
|
|
||||||
if onlyOk then
|
if onlyOk then
|
||||||
|
@ -1739,8 +1717,7 @@ function Promise.prototype:_resolve(...)
|
||||||
-- Without this warning, arguments sometimes mysteriously disappear
|
-- Without this warning, arguments sometimes mysteriously disappear
|
||||||
if select("#", ...) > 1 then
|
if select("#", ...) > 1 then
|
||||||
local message = string.format(
|
local message = string.format(
|
||||||
"When returning a Promise from andThen, extra arguments are " ..
|
"When returning a Promise from andThen, extra arguments are " .. "discarded! See:\n\n%s",
|
||||||
"discarded! See:\n\n%s",
|
|
||||||
self._source
|
self._source
|
||||||
)
|
)
|
||||||
warn(message)
|
warn(message)
|
||||||
|
@ -1748,36 +1725,33 @@ function Promise.prototype:_resolve(...)
|
||||||
|
|
||||||
local chainedPromise = ...
|
local chainedPromise = ...
|
||||||
|
|
||||||
local promise = chainedPromise:andThen(
|
local promise = chainedPromise:andThen(function(...)
|
||||||
function(...)
|
self:_resolve(...)
|
||||||
self:_resolve(...)
|
end, function(...)
|
||||||
end,
|
local maybeRuntimeError = chainedPromise._values[1]
|
||||||
function(...)
|
|
||||||
local maybeRuntimeError = chainedPromise._values[1]
|
|
||||||
|
|
||||||
-- Backwards compatibility < v2
|
-- Backwards compatibility < v2
|
||||||
if chainedPromise._error then
|
if chainedPromise._error then
|
||||||
maybeRuntimeError = Error.new({
|
maybeRuntimeError = Error.new({
|
||||||
error = chainedPromise._error,
|
error = chainedPromise._error,
|
||||||
kind = Error.Kind.ExecutionError,
|
kind = Error.Kind.ExecutionError,
|
||||||
context = "[No stack trace available as this Promise originated from an older version of the Promise library (< v2)]",
|
context = "[No stack trace available as this Promise originated from an older version of the Promise library (< v2)]",
|
||||||
})
|
})
|
||||||
end
|
|
||||||
|
|
||||||
if Error.isKind(maybeRuntimeError, Error.Kind.ExecutionError) then
|
|
||||||
return self:_reject(maybeRuntimeError:extend({
|
|
||||||
error = "This Promise was chained to a Promise that errored.",
|
|
||||||
trace = "",
|
|
||||||
context = string.format(
|
|
||||||
"The Promise at:\n\n%s\n...Rejected because it was chained to the following Promise, which encountered an error:\n",
|
|
||||||
self._source
|
|
||||||
),
|
|
||||||
}))
|
|
||||||
end
|
|
||||||
|
|
||||||
self:_reject(...)
|
|
||||||
end
|
end
|
||||||
)
|
|
||||||
|
if Error.isKind(maybeRuntimeError, Error.Kind.ExecutionError) then
|
||||||
|
return self:_reject(maybeRuntimeError:extend({
|
||||||
|
error = "This Promise was chained to a Promise that errored.",
|
||||||
|
trace = "",
|
||||||
|
context = string.format(
|
||||||
|
"The Promise at:\n\n%s\n...Rejected because it was chained to the following Promise, which encountered an error:\n",
|
||||||
|
self._source
|
||||||
|
),
|
||||||
|
}))
|
||||||
|
end
|
||||||
|
|
||||||
|
self:_reject(...)
|
||||||
|
end)
|
||||||
|
|
||||||
if promise._status == Promise.Status.Cancelled then
|
if promise._status == Promise.Status.Cancelled then
|
||||||
self:cancel()
|
self:cancel()
|
||||||
|
@ -1832,11 +1806,7 @@ function Promise.prototype:_reject(...)
|
||||||
end
|
end
|
||||||
|
|
||||||
-- Build a reasonable message
|
-- Build a reasonable message
|
||||||
local message = string.format(
|
local message = string.format("Unhandled Promise rejection:\n\n%s\n\n%s", err, self._source)
|
||||||
"Unhandled Promise rejection:\n\n%s\n\n%s",
|
|
||||||
err,
|
|
||||||
self._source
|
|
||||||
)
|
|
||||||
|
|
||||||
if Promise.TEST then
|
if Promise.TEST then
|
||||||
-- Don't spam output when we're running tests.
|
-- Don't spam output when we're running tests.
|
||||||
|
@ -1938,7 +1908,7 @@ function Promise.retry(callback, times, ...)
|
||||||
assert(type(callback) == "function", "Parameter #1 to Promise.retry must be a function")
|
assert(type(callback) == "function", "Parameter #1 to Promise.retry must be a function")
|
||||||
assert(type(times) == "number", "Parameter #2 to Promise.retry must be a number")
|
assert(type(times) == "number", "Parameter #2 to Promise.retry must be a number")
|
||||||
|
|
||||||
local args, length = {...}, select("#", ...)
|
local args, length = { ... }, select("#", ...)
|
||||||
|
|
||||||
return Promise.resolve(callback(...)):catch(function(...)
|
return Promise.resolve(callback(...)):catch(function(...)
|
||||||
if times > 0 then
|
if times > 0 then
|
||||||
|
|
Loading…
Reference in a new issue