Skip to content

Releases: evaera/roblox-lua-promise

Promise v4.0.0

03 Mar 00:19
Compare
Choose a tag to compare

[4.0.0]

Changed

  • Promise:finally no longer observes a rejection from a Promise. Calling Promise:finally is mostly transparent now.
    • The Promise returned by Promise:finally resolves or rejects with whatever the parent Promise resolved or rejected with. It will be cancelled if the parent Promise is cancelled.
    • The value returned from the finally handler is discarded now.
    • If the value returned from the finally handler is a Promise, we wait for it to resolve, but we do not use its value.
    • If the value returned from the finally handler is a Promise and it rejects, finally returns the new rejected value.
  • Promise:finally no longer counts as a consumer of the parent Promise for cancellation purposes. If all consumers are cancelled and the only remaining callbacks are finally handlers, the Promise is now cancelled.
  • The Promise executor thread is now closed with coroutine.close when the Promise is cancelled.
  • The Promise executor thread is now closed after the Promise settles (calling resolve or reject).
  • Callbacks enqueued with andThen and catch are now dequeued if the Promise returned by andThen/catch is cancelled.
  • Calling andThen or catch on an already-cancelled Promise now returns a cancelled Promise instead of returning a rejected Promise
  • :await, :expect, and :awaitStatus are no longer backed by BindableEvents, and now use the task library directly, so performance should be better.

Removed

  • Promise:done and its associated members have been removed.

roblox-lua-promise v4.0.0 Release Candidate 2

03 Jan 04:30
Compare
Choose a tag to compare

[4.0.0-rc.2] - 2022-01-02

Fixed

  • Fix bug where Promise.fold does not return correct value if there is an unresolved Promise in the passed list (#77)

[4.0.0-rc.1] - 2021-12-28

Changed

  • Promise:finally no longer observes a rejection from a Promise. Calling Promise:finally is mostly transparent now.
    • The Promise returned by Promise:finally resolves or rejects with whatever the parent Promise resolved or rejected with. It will be cancelled if the parent Promise is cancelled.
    • The value returned from the finally handler is discarded now.
    • If the value returned from the finally handler is a Promise, we wait for it to resolve, but we do not use its value.
    • If the value returned from the finally handler is a Promise and it rejects, finally returns the new rejected value.
  • Promise:finally no longer counts as a consumer of the parent Promise for cancellation purposes. If all consumers are cancelled and the only remaining callbacks are finally handlers, the Promise is now cancelled.
  • The Promise executor thread is now closed with coroutine.close when the Promise is cancelled.
  • The Promise executor thread is now closed after the Promise settles (calling resolve or reject).
  • Callbacks enqueued with andThen and catch are now dequeued if the Promise returned by andThen/catch is cancelled.
  • Calling andThen or catch on an already-cancelled Promise now returns a cancelled Promise instead of returning a rejected Promise
  • :await, :expect, and :awaitStatus are no longer backed by BindableEvents, and now use the task library directly, so performance should be better.

roblox-lua-promise v3.2.1

03 Jan 04:23
Compare
Choose a tag to compare

[3.2.1] - 2022-01-02

Fixed

  • Fix bug where Promise.fold does not return correct value if there is an unresolved Promise in the passed list (#77)

roblox-lua-promise v4.0.0 Release Candidate 1

28 Dec 10:36
Compare
Choose a tag to compare

[4.0.0-rc.1] - 2021-12-28

Changed

  • Promise:finally no longer observes a rejection from a Promise. Calling Promise:finally is mostly transparent now.
    • The Promise returned by Promise:finally resolves or rejects with whatever the parent Promise resolved or rejected with. It will be cancelled if the parent Promise is cancelled.
    • The value returned from the finally handler is discarded now.
    • If the value returned from the finally handler is a Promise, we wait for it to resolve, but we do not use its value.
    • If the value returned from the finally handler is a Promise and it rejects, finally returns the new rejected value.
  • Promise:finally no longer counts as a consumer of the parent Promise for cancellation purposes. If all consumers are cancelled and the only remaining callbacks are finally handlers, the Promise is now cancelled.
  • The Promise executor thread is now closed with coroutine.close when the Promise is cancelled.
  • The Promise executor thread is now closed after the Promise settles (calling resolve or reject).
  • Callbacks enqueued with andThen and catch are now dequeued if the Promise returned by andThen/catch is cancelled.
  • Calling andThen or catch on an already-cancelled Promise now returns a cancelled Promise instead of returning a rejected Promise
  • :await, :expect, and :awaitStatus are no longer backed by BindableEvents, and now use the task library directly, so performance should be better.

Removed

  • Promise:done and its associated members have been removed.

roblox-lua-promise v3.2.0

28 Dec 03:28
Compare
Choose a tag to compare

[3.2.0] - 2021-12-27

Added

  • Add Promise.onUnhandledRejection global event
  • Add Promise.retryWithDelay

Changed

  • Callable tables are now allowed anywhere that a function are allowed (Promise.new, andThen, etc)

roblox-lua-promise v3.1.0

02 Dec 01:27
Compare
Choose a tag to compare

[3.1.0] - 2020-12-01

Added

  • Added Promise.fold (#47)

roblox-lua-promise v3.0.1

24 Aug 17:42
Compare
Choose a tag to compare

[3.0.1] - 2020-08-24

Fixed

  • Make Promise.is work with promises from old versions of the library (#41)
  • Make Promise.delay properly break out of the current loop (#40)
  • Allow upvalues captured by queued callbacks to be garbage collected when the Promise resolves by deleting the queues when the Promise settles (#39)

roblox-lua-promise v3.0.0

24 Aug 17:55
Compare
Choose a tag to compare

[3.0.0] - 2020-08-17

  • Promise.delay now uses os.clock
  • Made Promise.delay behavior more consistent when creating new timers in the callback of a timer.

[3.0.0-rc.3] - 2020-07-10

Fixed

  • Fixed a bug where queued andThen and catch callbacks did not begin on their own new threads.

[3.0.0-rc.1] - 2020-06-02

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, and Promise.try executors.
  • Errors now have much better stack traces due to using xpcall internally instead of pcall.
  • 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 to Promise.defer (Promise.async references same function for compatibility)
  • Promises now have a __tostring metamethod, which returns Promise(Resolved) or whatever the current status is.
  • Promise:timeout() now rejects with a Promise.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 like Promise.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.)

roblox-lua-promise v3.0.0 Release Candidate 3

11 Jul 03:50
Compare
Choose a tag to compare
  • Fixed a bug where queued andThen and catch callbacks did not begin on their own new threads.

See RC 1 for full change list

roblox-lua-promise v3.0.0 Release Candidate 2

16 Jun 23:46
Compare
Choose a tag to compare
  • Internal changes and optimizations from PR #27

See RC 1 for full change list