Rx\Operator\MinOperator::__invoke PHP Метод

__invoke() публичный Метод

public __invoke ( Rx\ObservableInterface $observable, Rx\ObserverInterface $observer, Rx\SchedulerInterface $scheduler = null )
$observable Rx\ObservableInterface
$observer Rx\ObserverInterface
$scheduler Rx\SchedulerInterface
    public function __invoke(ObservableInterface $observable, ObserverInterface $observer, SchedulerInterface $scheduler = null)
    {
        $previousMin = null;
        $comparing = false;
        return $observable->subscribe(new CallbackObserver(function ($x) use(&$comparing, &$previousMin, $observer) {
            if (!$comparing) {
                $comparing = true;
                $previousMin = $x;
                return;
            }
            try {
                $result = call_user_func($this->comparer, $x, $previousMin);
                if ($result < 0) {
                    $previousMin = $x;
                }
            } catch (\Exception $e) {
                $observer->onError($e);
            }
        }, [$observer, 'onError'], function () use(&$comparing, &$previousMin, $observer) {
            if ($comparing) {
                $observer->onNext($previousMin);
                $observer->onCompleted();
                return;
            }
            $observer->onError(new \Exception("Empty"));
        }), $scheduler);
    }