如何在不停止迭代的情况下在生成器函数中传播错误?
示例:
class SynchronizeSchedules extends \Symfony\Component\Console\Command\Command
{
protected function execute(InputInterface $input, OutputInterface $output): void {
$synchronizer = new \ScheduleSync();
foreach ($synchronizer->sync() as $schedule) {
$output->writeln("Schedule {$schedule->id} synchronized");
}
}
}
class ScheduleSync
{
public function sync(): \Generator {
$data = [/* data from somewhere */];
foreach ($data as $d) {
try {
// insert into database
$this->db->insert('...');
yield $d;
} catch (DBALException $e) {
// something went wrong
}
}
}
}
如果发生数据库错误(DBALException
),我想做些事情。例如,在CLI命令(Symfony控制台)中,我想写入STDOUT。在Web应用程序中调用该错误时,将错误记录到文件或其他内容中更为合适。
除了将LoggerInterface对象传递给具有生成器方法的类之外,还有一种干净的方法来处理此问题吗?