Rx\Operator\SwitchFirstOperator::__invoke PHP Method

__invoke() public method

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)
    {
        $singleDisposable = new SingleAssignmentDisposable();
        $disposable = new CompositeDisposable();
        $disposable->add($singleDisposable);
        $callbackObserver = new CallbackObserver(function (Observable $x) use($disposable, $scheduler, $observer) {
            if ($this->hasCurrent) {
                return;
            }
            $this->hasCurrent = true;
            $inner = new SingleAssignmentDisposable();
            $disposable->add($inner);
            $innerSub = $x->subscribe(new CallbackObserver([$observer, "onNext"], [$observer, "onError"], function () use($disposable, $inner, $observer) {
                $disposable->remove($inner);
                $this->hasCurrent = false;
                if ($this->isStopped && $disposable->count() === 1) {
                    $observer->onCompleted();
                }
            }), $scheduler);
            $inner->setDisposable($innerSub);
        }, [$observer, 'onError'], function () use($disposable, $observer) {
            $this->isStopped = true;
            if (!$this->hasCurrent && $disposable->count() === 1) {
                $observer->onCompleted();
            }
        });
        $singleDisposable->setDisposable($observable->subscribe($callbackObserver, $scheduler));
        return $disposable;
    }
SwitchFirstOperator