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