42 function task(callable $task)
45 $promise =
new Promise([$queue,
'run']);
46 $queue->add(
function () use ($task, $promise) {
48 $promise->resolve($task());
49 }
catch (\Throwable $e) {
51 }
catch (\Exception $e) {
73 if (method_exists($value,
'then')) {
74 $wfn = method_exists($value,
'wait') ? [$value,
'wait'] :
null;
75 $cfn = method_exists($value,
'cancel') ? [$value,
'cancel'] :
null;
76 $promise =
new Promise($wfn, $cfn);
77 $value->then([$promise,
'resolve'], [$promise,
'reject']);
110 return $reason instanceof \Exception || $reason instanceof \Throwable
124 if ($value instanceof \Iterator) {
126 } elseif (is_array($value)) {
127 return new \ArrayIterator($value);
129 return new \ArrayIterator([$value]);
152 'value' => $promise->
wait()
156 }
catch (\Throwable $e) {
158 }
catch (\Exception $e) {
177 foreach ($promises as $key => $promise) {
178 $results[$key] =
inspect($promise);
200 foreach ($promises as $key => $promise) {
201 $results[$key] = $promise->wait();
224 function ($value, $idx) use (&$results) {
225 $results[$idx] = $value;
227 function ($reason, $idx,
Promise $aggregate) {
228 $aggregate->reject($reason);
230 )->
then(
function () use (&$results) {
252 function some($count, $promises)
263 $results[$idx] = $value;
264 if (count($results) >= $count) {
268 function ($reason) use (&$rejections) {
269 $rejections[] = $reason;
272 function () use (&$results, &$rejections, $count) {
273 if (count($results) !== $count) {
275 'Not enough promises to fulfill count',
280 return array_values($results);
295 return some(1, $promises)->then(
function ($values) {
return $values[0]; });
315 function ($value, $idx) use (&$results) {
318 function ($reason, $idx) use (&$results) {
321 )->
then(
function () use (&$results) {
348 callable $onFulfilled =
null,
349 callable $onRejected =
null
352 'fulfilled' => $onFulfilled,
353 'rejected' => $onRejected
375 callable $onFulfilled =
null,
376 callable $onRejected =
null
379 'fulfilled' => $onFulfilled,
380 'rejected' => $onRejected,
381 'concurrency' => $concurrency
399 callable $onFulfilled =
null
406 $aggregate->
reject($reason);