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

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

public __invoke ( Rx\ObservableInterface $observable, Rx\ObserverInterface $observer, Rx\SchedulerInterface $scheduler = null ) : Rx\DisposableInterface
$observable Rx\ObservableInterface
$observer Rx\ObserverInterface
$scheduler Rx\SchedulerInterface
Результат Rx\DisposableInterface
    public function __invoke(ObservableInterface $observable, ObserverInterface $observer, SchedulerInterface $scheduler = null)
    {
        $disposable = new SerialDisposable();
        $getNewObserver = function () use($observable, $observer, $disposable, &$getNewObserver, $scheduler) {
            return new CallbackObserver([$observer, "onNext"], function ($error) use($observable, $observer, $disposable, &$getNewObserver, $scheduler) {
                $this->retryCount--;
                if ($this->retryCount === 0) {
                    $observer->onError($error);
                    return;
                }
                $subscription = $observable->subscribe($getNewObserver(), $scheduler);
                $disposable->setDisposable($subscription);
            }, function () use($observer) {
                $observer->onCompleted();
                $this->retryCount = 0;
            });
        };
        $subscription = $observable->subscribe($getNewObserver(), $scheduler);
        $disposable->setDisposable($subscription);
        return new CallbackDisposable(function () use(&$disposable) {
            $disposable->dispose();
        });
    }