public function __invoke(ObservableInterface $observable, ObserverInterface $observer, SchedulerInterface $scheduler = null)
{
$callbackObserver = new CallbackObserver(function ($value) use($observer, $observable) {
try {
if ($this->isSkipping) {
$this->isSkipping = call_user_func_array($this->predicate, [$value, $observable]);
}
if (!$this->isSkipping) {
$observer->onNext($value);
}
} catch (\Exception $e) {
$observer->onError($e);
}
}, [$observer, 'onError'], [$observer, 'onCompleted']);
return $observable->subscribe($callbackObserver, $scheduler);
}