Revision history for Perl module Promise::ES6

0.28 Sun 26 Mar 2023
- Fix compatibility with Awaitable 0.64 and earlier.

0.27 Wed 22 Mar 2023
- Tweak AWAIT_GET to conform to Awaitable 0.65 test suite, which added
  a new requirement for error reporting. Errors will now “come from”
  whatever calls AWAIT_GET rather than AWAIT_GET’s internals.
- Report Awaitable test version, so we can more easily diagnose
  issues like the Awaitable 0.65 change.

0.26 Sun 8 Jan 2023
- (No production changes.)
- Skip async/await tests on DEBUGGING perls (fixes CPAN Testers).
- Migrate to cpanfile
- Consolidate GitHub CI.

0.25 Tue 23 Nov 2021
- Make async/await tests require a suitably modern F::AA.
- Ignore warnings from F::AA in t/async_await_additional.t.

0.24 Fri 16 Jul 2021
- Added EXPERIMENTAL async/await support via Future::AsyncAwait.
- Fix tests under Devel::Cover.

0.23 Wed 15 Jul 2020
- Undefined or missing rejection values now trigger a warning.

0.22 Sun 19 Apr 2020
- BUG FIX: finally() within a callback no longer produces
  action-at-a-distance bugs from reuse of package variables.
- BUG FIX: Resolve callbacks now properly defer propagation when an
  unfulfilled promise is given as the resolution value.
- Promise::ES6 can now “transparently” work in asynchronous mode via the
  new use_event() function. The old separate classes will eventually be
- allSettled() method is added.
- Unhandled rejection warnings now show the stringification of the
  promise object itself. This can help with debugging.

0.21 Sun 29 Mar 2020
- BUG FIX: all() and race() now recognize all “then()”-able objects (not
  merely Promise::ES6 instances) as promises.
- BUG FIX: Exceptions thrown in finally() callbacks are now assigned as the
  promise’s rejection value. (Previously undef was errantly assigned as the
  rejection value.)

0.20 Sat 22 Feb 2020
- We now recognize all “then()”-able objects as promises. This facilitates
  interoperability with other promise implementations but also creates
  “false-positive” interactions with Future. (NB: This change omitted all()
  and race(); the next version fixes this.)
- BREAKING CHANGE (minor): finally() callbacks now run in scalar context.
  (The return is ignored, though, unless you return a promise that rejects.)
- BUG FIX: finally() callbacks now handle rejected promises as returns
  according to the ES6 specification.
- BUG FIX: Promises that reject because a rejected promise was returned from
  a callback will now warn if the “consequent” rejection is unhandled.

0.19 Thu 20 Feb 2020
- BREAKING CHANGE / BUG FIX: finally() now matches the ES6 standard better.
  While the erstwhile differences weren’t documented, they’re salient enough
  to be noticeable. That said, it seems unlikely that anything depended on the
  old (useless?) behavior.
    * Its callback no longer receives any arguments.
    * Its callback runs in void context. (NB: Changed to scalar in 0.20.)
    * Its returned promise now duplicates the original if the callback
      succeeds. This means that unhandled rejection warnings will now fire
      correctly from finally().
- BUG FIX: all() and race() now correctly handle all promises’ rejections.
- Anything that has a then() method is now regarded as a promise. This allows
  easier compatibility with other promise implementations.
- All unresolved promises—including those resolved immediately—now prompt
  uncaught-rejection warnings. The prior behavior of suppressing the warning
  for immediately-rejected promises made sense under initial implementations
  of the uncaught-rejection warning but now appears to serve no useful end.

0.18 Thu 16 Jan 2020
- Rejected promises no longer “repromise” their rejection values. Previously
  this module would attempt to settle a value given to a rejector callback
  in the same way as with a value given to a resolver callback; however,
  this behavior deviated from ES6 behavior. Since it was undocumented anyway,
  it’s removed here.
- Fix t/mojo.t to abort if given an unworkable Mojolicious version.

0.17 Sun 5 Jan 2020
- Optimization: remove extra call to isa(), and use $self rather than $_[0].
  (Thank you, bdraco!)

0.16 Tue 31 Dec 2019
- Optimization: reuse coderefs in all() and race().

0.15 Thu 19 Dec 2019
- BUG FIX: Make all() ignore rejections after the first one.
- Promise::ES6’s internal representation has changed to reduce memory usage.
  Any code that may depend on the former internals will likely be broken.
- Speed up implementation.
- Clarify intent when an executor function $resolve_cr is passed a promise.
- Make Mojo subclass require a sufficiently modern Mojo::IOLoop.
- Update docs a bit.
- Refactor implementation to prepare for XS backend.

0.14 Wed 27 Nov 2019
- Fix test by requiring a reasonably recent Test::More.

0.13 Tue 26 Nov 2019
- Provide Future conversion logic.
- Flesh out documentation.

0.12 Thu 21 Nov 2019
- Fix event-loop logic to run ->then() asynchronously.
- Remove left-in Data::Dumper.
- Add Mojolicious backend.

0.11 Fri 15 Nov 2019
- Fix memory leak in callback propagation.

0.10 Thu 14 Nov 2019
- Fix ::AnyEvent and ::IOAsync to pass values to callbacks.

0.09 Thu 14 Nov 2019
- Update documentation with discussions of synchronous operation and
- Add Promise::ES6::AnyEvent and Promise::ES6::IOAsync to implement
  Promises/A+ support. (EXPERIMENTAL)
- Fix warnings in tests on old Perl versions.

0.08 Sun 22 Sep 2019
- Fix memory leaks in pre-5.18 perls, and proactively delete internal
- Update documentation about memory leaks.

0.07 Tue 17 Sep 2019
- Fix a number of memory leaks. (This necessitated some significant
  changes underneath.)
- Fix spurious unhandled-rejection warnings. These now happen at DESTROY
  time rather than right away. (I consider this too subtle of a change to
  be “breaking”.)
- Add more tests.

0.06 Thu 12 Sep 2019
- Issue #2: Make all() resolve when given an empty array reference.

0.05 Wed 31 Jul 2019
- Issue #1: Prevent warn() when creating a pre-rejected promise.

0.04 Mon 4 Mar 2019
- Fix missing test dependency. (doh!)

0.03 Sat 2 Mar 2019
- warn() on unhandled promise rejection.

0.02 Wed 13 Feb 2019
- Make tests Windows-compatible. (cf. RT #128491)
  No production changes.

0.01 Mon 11 Feb 2019
- Initial release