use Amp\Deferred as AmpDeferred;
use AsyncInterop\Promise;
-use Icicle\Awaitable\Deferred as IcicleDeferred;
use React\Promise\Deferred as ReactDeferred;
use seekat\API\Future;
* @param mixed $context Promisor
* @return \Closure
*/
-function updater(Future $future, $context) {
- return function($update) use($future, $context) {
- return $future->onUpdate($context, $update);
+function reducer(Future $future, $context) {
+ return function(array $promises) use($future, $context) : Promise {
+ return $future->onMultiple($context, $promises);
};
}
return $context->promise();
}
+ function cancelPromise(Promise $promise) : bool {
+ /* @var $promise \React\Promise\Promise */
+ $promise->cancel();
+ return true;
+ }
+
function onSuccess($context, $value) {
/* @var $context ReactDeferred */
$context->resolve($value);
$context->reject($reason);
}
- function onUpdate($context, $update) {
- /* @var $context ReactDeferred */
- $context->notify($update);
+ function onMultiple($context, array $promises) : Promise {
+ return \React\Promise\all($promises);
}
};
}
return $context->promise();
}
- function onSuccess($context, $value) {
- /* @var $context AmpDeferred */
- $context->resolve($value);
- }
-
- function onFailure($context, $reason) {
- /* @var $context AmpDeferred */
- $context->fail($reason);
- }
-
- function onUpdate($context, $update) {
- /* @var $context AmpDeferred */
- /* noop */
- }
- };
-}
-
-/**
- * @return Future
- */
-function icicle() {
- return new class implements Future {
- /**
- * @param callable|null $onCancel
- * @return IcicleDeferred
- */
- function createContext(callable $onCancel = null) {
- return new IcicleDeferred($onCancel);
- }
-
- function getPromise($context): Promise {
- /* @var $context IcicleDeferred */
- return $context->getPromise();
+ function cancelPromise(Promise $promise) : bool {
+ return false;
}
function onSuccess($context, $value) {
- /* @var $context IcicleDeferred */
+ /* @var $context AmpDeferred */
$context->resolve($value);
}
function onFailure($context, $reason) {
- /* @var $context IcicleDeferred */
- $context->reject($reason);
+ /* @var $context AmpDeferred */
+ $context->fail(\seekat\Exception\exception($reason));
}
- function onUpdate($context, $update) {
- /* @var $context IcicleDeferred */
- /* noop */
+ function onMultiple($context, array $promises) : Promise {
+ return \Amp\all($promises);
}
};
}