b6e890886aa511a8b8152fd9f308dbc7c1d03087
3 namespace seekat\API\Future
;
5 use Amp\Deferred
as AmpDeferred
;
6 use AsyncInterop\Promise
;
7 use React\Promise\Deferred
as ReactDeferred
;
11 * @param Future $future
15 function resolve(Future
$future, $value) {
16 $promisor = $future->createContext();
17 $future->onSuccess($promisor, $value);
18 return $future->getPromise($promisor);
22 * @param Future $future
23 * @param mixed $reason
26 function reject(Future
$future, $reason) {
27 $promisor = $future->createContext();
28 $future->onFailure($promisor, $reason);
29 return $future->getPromise($promisor);
33 * @param Future $future
34 * @param mixed $context Promisor
37 function resolver(Future
$future, $context) {
38 return function($value) use($future, $context) {
39 return $future->onSuccess($context, $value);
44 * @param Future $future
45 * @param mixed $context Promisor
48 function rejecter(Future
$future, $context) {
49 return function($reason) use($future, $context) {
50 return $future->onFailure($context, $reason);
55 * @param Future $future
56 * @param mixed $context Promisor
59 function reducer(Future
$future, $context) {
60 return function(array $promises) use($future, $context) : Promise
{
61 return $future->onMultiple($context, $promises);
69 return new class implements Future
{
71 * @param callable|null $onCancel
72 * @return ReactDeferred
74 function createContext(callable
$onCancel = null) {
75 return new ReactDeferred($onCancel);
78 function getPromise($context) : Promise
{
79 /* @var $context ReactDeferred */
80 return $context->promise();
83 function cancelPromise(Promise
$promise) : bool {
84 /* @var $promise \React\Promise\Promise */
89 function onSuccess($context, $value) {
90 /* @var $context ReactDeferred */
91 $context->resolve($value);
94 function onFailure($context, $reason) {
95 /* @var $context ReactDeferred */
96 $context->reject($reason);
99 function onMultiple($context, array $promises) : Promise
{
100 return \React\Promise\all
($promises);
109 return new class implements Future
{
111 * @return AmpDeferred
113 function createContext(callable
$onCancel = null) {
114 return new AmpDeferred();
117 function getPromise($context) : Promise
{
118 /* @var $context AmpDeferred */
119 return $context->promise();
122 function cancelPromise(Promise
$promise) : bool {
126 function onSuccess($context, $value) {
127 /* @var $context AmpDeferred */
128 $context->resolve($value);
131 function onFailure($context, $reason) {
132 /* @var $context AmpDeferred */
133 $context->fail(\seekat\Exception\
exception($reason));
136 function onMultiple($context, array $promises) : Promise
{
137 return \Amp\all
($promises);