CHANGELOG
=========

* 2.2.2 (2016-02-26)

  * Fix cancellation handlers called multiple times (#47 by @clue).

* 2.2.1 (2015-07-03)

  * Fix stack error when resolving a promise in its own fulfillment or rejection
    handlers.

* 2.2.0 (2014-12-30)

  * Introduce new ExtendedPromiseInterface implemented by all promises
  * Add new .done() method (part of the ExtendedPromiseInterface)
  * Add new .otherwise() method (part of the ExtendedPromiseInterface)
  * Add new .always() method (part of the ExtendedPromiseInterface)
  * Add new .progress() method (part of the ExtendedPromiseInterface)
  * Rename Deferred::progress to Deferred::notify to avoid confusion with
    ExtendedPromiseInterface::progress (a Deferred::progress alias is still
    available for backward compatibility)
  * resolve() now always returns a ExtendedPromiseInterface

* 2.1.0 (2014-10-15)

  * Introduce new CancellablePromiseInterface implemented by all promises
  * Add new .cancel() method (part of the CancellablePromiseInterface)

* 2.0.0 (2013-12-10)

  New major release. The goal was to streamline the API and to make it more
  compliant with other promise libraries and especially with the new upcoming
  [ES6 promises specification](https://github.com/domenic/promises-unwrapping/).

  * Add standalone Promise class.
  * Add new React\Promise\race() function.
  * BC break: Bump minimum PHP version to PHP 5.4.
  * BC break: Remove ResolverInterface and PromiseInterface from Deferred.
  * BC break: Change signature of PromiseInterface.
  * BC break: Remove When and Util classes and move static methods to functions.
  * BC break: FulfilledPromise and RejectedPromise now throw an exception when
    initialized with a promise instead of a value/reason.
  * BC break: React\Promise\Deferred::resolve() and React\Promise\Deferred::reject()
    no longer return a promise.

* 1.0.4 (2013-04-03)

  * Trigger PHP errors when invalid callback is passed.
  * Fully resolve rejection value before calling rejection handler.
  * Add When::lazy() to create lazy promises which will be initialized once a
    consumer calls the then() method.

* 1.0.3 (2012-11-17)

  * Add `PromisorInterface` for objects that have a `promise()` method.

* 1.0.2 (2012-11-14)

  * Fix bug in When::any() not correctly unwrapping to a single result value
  * $promiseOrValue argument of When::resolve() and When::reject() is now optional

* 1.0.1 (2012-11-13)

  * Prevent deep recursion which was reaching `xdebug.max_nesting_level` default of 100

* 1.0.0 (2012-11-07)

  * First tagged release
