Rx\Scheduler\ImmediateScheduler::scheduleRecursive PHP Method

scheduleRecursive() public method

public scheduleRecursive ( callable $action )
$action callable
    public function scheduleRecursive(callable $action)
    {
        if (!is_callable($action)) {
            throw new InvalidArgumentException("Action should be a callable.");
        }
        $goAgain = true;
        $disposable = new CompositeDisposable();
        $recursiveAction = function () use($action, &$goAgain, $disposable) {
            while ($goAgain) {
                $goAgain = false;
                $disposable->add($this->schedule(function () use($action, &$goAgain, $disposable) {
                    return $action(function () use(&$goAgain, $action) {
                        $goAgain = true;
                    });
                }));
            }
        };
        $disposable->add($this->schedule($recursiveAction));
        return $disposable;
    }

Usage Example

Example #1
0
 public function subscribe(ObserverInterface $observer, SchedulerInterface $scheduler = null)
 {
     if ($this->scheduler !== null) {
         $scheduler = $this->scheduler;
     }
     if ($scheduler === null) {
         $scheduler = new ImmediateScheduler();
     }
     $i = 0;
     return $scheduler->scheduleRecursive(function ($reschedule) use(&$observer, &$i) {
         if ($i < $this->count) {
             $observer->onNext($this->start + $i);
             $i++;
             $reschedule();
         } else {
             $observer->onCompleted();
         }
     });
 }
All Usage Examples Of Rx\Scheduler\ImmediateScheduler::scheduleRecursive