X-Git-Url: https://git.m6w6.name/?p=m6w6%2Fseekat;a=blobdiff_plain;f=lib%2FAPI%2FFuture%2Ffunctions.php;h=b9559128da8d7df09be7df6a9a12cc4757cbedec;hp=34d38c5adbe78d55c59b9c3a223f8cea11017aa0;hb=d38b3ae03472ba2f9af5009778574b23472bb3f7;hpb=f4aa6beaf2e1f0dc9c877782cbbad5a989194517 diff --git a/lib/API/Future/functions.php b/lib/API/Future/functions.php index 34d38c5..b955912 100644 --- a/lib/API/Future/functions.php +++ b/lib/API/Future/functions.php @@ -3,30 +3,30 @@ namespace seekat\API\Future; use Amp\Deferred as AmpDeferred; -use AsyncInterop\Promise; -use Icicle\Awaitable\Deferred as IcicleDeferred; +use Amp\Promise as AmpPromise; use React\Promise\Deferred as ReactDeferred; +use React\Promise\PromiseInterface as ReactPromise; use seekat\API\Future; /** * @param Future $future * @param mixed $value - * @return Promise + * @return mixed promise */ function resolve(Future $future, $value) { $promisor = $future->createContext(); - $future->onSuccess($promisor, $value); + $future->resolve($promisor, $value); return $future->getPromise($promisor); } /** * @param Future $future * @param mixed $reason - * @return Promise + * @return mixed promise */ function reject(Future $future, $reason) { $promisor = $future->createContext(); - $future->onFailure($promisor, $reason); + $future->reject($promisor, $reason); return $future->getPromise($promisor); } @@ -37,7 +37,7 @@ function reject(Future $future, $reason) { */ function resolver(Future $future, $context) { return function($value) use($future, $context) { - return $future->onSuccess($context, $value); + return $future->resolve($context, $value); }; } @@ -48,7 +48,7 @@ function resolver(Future $future, $context) { */ function rejecter(Future $future, $context) { return function($reason) use($future, $context) { - return $future->onFailure($context, $reason); + return $future->reject($context, $reason); }; } @@ -57,9 +57,9 @@ function rejecter(Future $future, $context) { * @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) { + return $future->all($context, $promises); }; } @@ -76,24 +76,37 @@ function react() { return new ReactDeferred($onCancel); } - function getPromise($context) : Promise { + function getPromise($context) { /* @var $context ReactDeferred */ return $context->promise(); } - function onSuccess($context, $value) { + function isPromise($promise) : bool { + return $promise instanceof ReactPromise; + } + + function handlePromise($promise, callable $onResult = null, callable $onError = null) { + return $promise->then($onResult, $onError); + } + + function cancelPromise($promise) : bool { + /* @var $promise \React\Promise\Promise */ + $promise->cancel(); + return true; + } + + function resolve($context, $value) { /* @var $context ReactDeferred */ $context->resolve($value); } - function onFailure($context, $reason) { + function reject($context, $reason) { /* @var $context ReactDeferred */ $context->reject($reason); } - function onUpdate($context, $update) { - /* @var $context ReactDeferred */ - $context->notify($update); + function all($context, array $promises) { + return \React\Promise\all($promises); } }; } @@ -110,59 +123,46 @@ function amp() { return new AmpDeferred(); } - function getPromise($context) : Promise { + function getPromise($context) { /* @var $context AmpDeferred */ 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 */ + function isPromise($promise) : bool { + return $promise instanceof AmpPromise; } - }; -} -/** - * @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 handlePromise($promise, callable $onResult = null, callable $onError = null) { + $promise->onResolve(function($error = null, $result = null) use($onResult, $onError) { + if ($error) { + if ($onError) { + $onError($error); + } + } else { + if ($onResult) { + $onResult($result); + } + } + }); + return $promise; } - function getPromise($context): Promise { - /* @var $context IcicleDeferred */ - return $context->getPromise(); + function cancelPromise($promise) : bool { + return false; } - function onSuccess($context, $value) { - /* @var $context IcicleDeferred */ + function resolve($context, $value) { + /* @var $context AmpDeferred */ $context->resolve($value); } - function onFailure($context, $reason) { - /* @var $context IcicleDeferred */ - $context->reject($reason); + function reject($context, $reason) { + /* @var $context AmpDeferred */ + $context->fail(\seekat\Exception\exception($reason)); } - function onUpdate($context, $update) { - /* @var $context IcicleDeferred */ - /* noop */ + function all($context, array $promises) { + return \Amp\all($promises); } }; }