React\Promise\Promise::always PHP Method

always() public method

public always ( callable $onFulfilledOrRejected )
$onFulfilledOrRejected callable
    public function always(callable $onFulfilledOrRejected)
    {
        return $this->then(function ($value) use($onFulfilledOrRejected) {
            return resolve($onFulfilledOrRejected())->then(function () use($value) {
                return $value;
            });
        }, function ($reason) use($onFulfilledOrRejected) {
            return resolve($onFulfilledOrRejected())->then(function () use($reason) {
                return new RejectedPromise($reason);
            });
        });
    }

Usage Example

 /**
  *
  * @param EventEmitterInterface $emitter
  * @param string[] $fulfillEvents
  * @param string[] $rejectEvents
  * @param string[] $notifyEvents
  * @return ExtendedPromiseInterface
  */
 public static function listen(EventEmitterInterface $emitter, array $fulfillEvents = [], array $rejectEvents = [], array $notifyEvents = [])
 {
     $listeners = [];
     $removeListeners = function () use($emitter, &$listeners) {
         foreach ($listeners as $event => $callback) {
             $emitter->removeListener($event, $callback);
         }
         $listeners = [];
     };
     $promise = new Promise(function ($resolve, $reject, $notify) use($emitter, &$listeners, $fulfillEvents, $rejectEvents, $notifyEvents) {
         $listeners = array_merge(static::registerCallbacks($emitter, $fulfillEvents, $resolve), static::registerCallbacks($emitter, $rejectEvents, $reject), static::registerCallbacks($emitter, $notifyEvents, $notify));
     }, $removeListeners);
     return $promise->always($removeListeners);
 }