/** * @inheritDoc */ public function __invoke(ObservableInterface $observable, ObserverInterface $observer, SchedulerInterface $scheduler = null) { return $observable->mapWithIndex(function ($index, $value) use($observable, $observer) { try { $result = call_user_func_array($this->selector, [$value, $index, $observable]); if (!$result instanceof Observable) { throw new \Exception('concatMap Error: You must return an Observable from the concatMap selector'); } if ($this->resultSelector) { return $result->mapWithIndex(function ($innerIndex, $innerValue) use($value, $index) { return call_user_func_array($this->resultSelector, [$value, $innerValue, $index, $innerIndex]); }); } return $result; } catch (\Exception $e) { $observer->onError($e); } })->concatAll()->subscribe($observer, $scheduler); }