Rx\Operator\SwitchLatestOperator::__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)
    {
        $onNext = function ($innerSource) use($observer, $scheduler) {
            $innerDisposable = new SingleAssignmentDisposable();
            $id = ++$this->latest;
            $this->hasLatest = true;
            $this->innerSubscription->setDisposable($innerDisposable);
            $innerCallbackObserver = new CallbackObserver(function ($x) use($id, $observer) {
                if ($this->latest === $id) {
                    $observer->onNext($x);
                }
            }, function ($e) use($id, $observer) {
                if ($this->latest === $id) {
                    $observer->onError($e);
                }
            }, function () use($id, $observer) {
                if ($this->latest === $id) {
                    $this->hasLatest = false;
                    if ($this->isStopped) {
                        $observer->onCompleted();
                    }
                }
            });
            $innerSubscription = $innerSource->subscribe($innerCallbackObserver, $scheduler);
            $innerDisposable->setDisposable($innerSubscription);
        };
        $callbackObserver = new CallbackObserver($onNext, [$observer, 'onError'], function () use($observer) {
            $this->isStopped = true;
            if (!$this->hasLatest) {
                $observer->onCompleted();
            }
        });
        $subscription = $observable->subscribe($callbackObserver, $scheduler);
        return new BinaryDisposable($subscription, $this->innerSubscription);
    }
SwitchLatestOperator