Search moodle.org's
Developer Documentation

See Release Notes

  • Bug fixes for general core bugs in 4.2.x will end 22 April 2024 (12 months).
  • Bug fixes for security issues in 4.2.x will end 7 October 2024 (18 months).
  • PHP version: minimum PHP 8.0.0 Note: minimum PHP version has increased since Moodle 4.1. PHP 8.1.x is supported too.
   1  <?php
   2  
   3  namespace GuzzleHttp\Promise;
   4  
   5  final class Each
   6  {
   7      /**
   8       * Given an iterator that yields promises or values, returns a promise that
   9       * is fulfilled with a null value when the iterator has been consumed or
  10       * the aggregate promise has been fulfilled or rejected.
  11       *
  12       * $onFulfilled is a function that accepts the fulfilled value, iterator
  13       * index, and the aggregate promise. The callback can invoke any necessary
  14       * side effects and choose to resolve or reject the aggregate if needed.
  15       *
  16       * $onRejected is a function that accepts the rejection reason, iterator
  17       * index, and the aggregate promise. The callback can invoke any necessary
  18       * side effects and choose to resolve or reject the aggregate if needed.
  19       *
  20       * @param mixed    $iterable    Iterator or array to iterate over.
  21       * @param callable $onFulfilled
  22       * @param callable $onRejected
  23       *
  24       * @return PromiseInterface
  25       */
  26      public static function of(
  27          $iterable,
  28          callable $onFulfilled = null,
  29          callable $onRejected = null
  30      ) {
  31          return (new EachPromise($iterable, [
  32              'fulfilled' => $onFulfilled,
  33              'rejected'  => $onRejected
  34          ]))->promise();
  35      }
  36  
  37      /**
  38       * Like of, but only allows a certain number of outstanding promises at any
  39       * given time.
  40       *
  41       * $concurrency may be an integer or a function that accepts the number of
  42       * pending promises and returns a numeric concurrency limit value to allow
  43       * for dynamic a concurrency size.
  44       *
  45       * @param mixed        $iterable
  46       * @param int|callable $concurrency
  47       * @param callable     $onFulfilled
  48       * @param callable     $onRejected
  49       *
  50       * @return PromiseInterface
  51       */
  52      public static function ofLimit(
  53          $iterable,
  54          $concurrency,
  55          callable $onFulfilled = null,
  56          callable $onRejected = null
  57      ) {
  58          return (new EachPromise($iterable, [
  59              'fulfilled'   => $onFulfilled,
  60              'rejected'    => $onRejected,
  61              'concurrency' => $concurrency
  62          ]))->promise();
  63      }
  64  
  65      /**
  66       * Like limit, but ensures that no promise in the given $iterable argument
  67       * is rejected. If any promise is rejected, then the aggregate promise is
  68       * rejected with the encountered rejection.
  69       *
  70       * @param mixed        $iterable
  71       * @param int|callable $concurrency
  72       * @param callable     $onFulfilled
  73       *
  74       * @return PromiseInterface
  75       */
  76      public static function ofLimitAll(
  77          $iterable,
  78          $concurrency,
  79          callable $onFulfilled = null
  80      ) {
  81          return each_limit(
  82              $iterable,
  83              $concurrency,
  84              $onFulfilled,
  85              function ($reason, $idx, PromiseInterface $aggregate) {
  86                  $aggregate->reject($reason);
  87              }
  88          );
  89      }
  90  }