public function __invoke(ObservableInterface $observable, ObserverInterface $observer, SchedulerInterface $scheduler = null)
{
$callbackObserver = new CallbackObserver(function ($nextValue) use($observer) {
$this->items[] = $nextValue;
if (count($this->items) > $this->count) {
array_shift($this->items);
}
}, [$observer, 'onError'], function () use($observer) {
while (count($this->items) > 0) {
$observer->onNext(array_shift($this->items));
}
$observer->onCompleted();
});
return $observable->subscribe($callbackObserver, $scheduler);
}