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);
}