У меня есть генератор, который передает коллекцию значений в метод и выдает результат.Вызываемый метод может вернуть исключение.Когда это происходит, я бы хотел, чтобы исключение провалилось в код, который вызывает генератор для обработки исключения, а затем продолжил цикл генератора.
Чтобы проиллюстрировать это, ниже приведен пример генератора, который будетyield 1
, бросить \Exception
, затем yield 3
.
/** @var \Generator $gen */
$gen = function () {
for ($i = 1; $i <= 3; $i++) {
if ($i == 2) {
throw new \Exception('Exception thrown for 2');
}
yield $i;
}
};
Это пример моей попытки запустить этот код, напримерчто я могу получить его, чтобы получить 3
$g = $gen();
var_export($g->current());
echo "\n";
try {
$g->next();
var_export($g->current());
echo "\n";
} catch (\Exception $e) {
echo $e->getMessage() . "\n";
}
try {
$g->next();
var_export($g->current());
echo "\n";
} catch (\Exception $e) {
echo $e->getMessage() . "\n";
}
Ниже приведен вывод вышеприведенного кода.
1
Exception thrown for 2.
NULL
Итак, повторные вызовы next()
ничего не делает и current()
вернет NULL
, где я бы хотел, чтобы генератор продолжил работу после исключения, чтобы я мог получить 3
.