Releases: evaera/roblox-lua-promise
Releases · evaera/roblox-lua-promise
roblox-lua-promise v3.0.0 Release Candidate 1
Changed
- Runtime errors are now represented by objects. You must call tostring on rejection values before assuming they are strings (this was always good practice, but is required now).
- Yielding is now allowed in
Promise.new
,andThen
, andPromise.try
executors. - Errors now have much better stack traces due to using
xpcall
internally instead ofpcall
. - Stack traces will now be more direct and not include as many internal calls within the Promise library.
- Chained promises from
resolve()
or returning from andThen now have improved rejection messages for debugging. Promise.async
has been renamed toPromise.defer
(Promise.async
references same function for compatibility)- Promises now have a
__tostring
metamethod, which returnsPromise(Resolved)
or whatever the current status is. Promise:timeout()
now rejects with aPromise.Error(Promise.Error.Kind.TimedOut)
object. (Formerly rejected with the string"Timed out"
)- Attaching a handler to a cancelled Promise now rejects with a
Promise.Error(Promise.Error.Kind.AlreadyCancelled)
. (Formerly rejected with the string"Promise is cancelled"
) - Let
Promise:expect()
throw rejection objects
Added
- New Promise Error class is exposed at
Promise.Error
, which includes helpful static methods likePromise.Error.is
. - Added
Promise:now()
(#23) - Added
Promise.each
(#21) - Added
Promise.retry
(#16) - Added
Promise.fromEvent
(#14) - Improved test coverage for asynchronous and time-driven functions
Fixed
- Changed
Promise.is
to be safe when dealing with tables that have an__index
metamethod that creates an error. Promise.delay
resolve value (time passed) is now more accurate (previously passed time based on when we started resuming threads instead of the current time. This is a very minor difference.)