Добрый вечер всем.
Может кто знает, есть ли способ для AE ловить ошибку там, где объявлен
коллбек?
А то постоянно приходится потенциально опасные места всех коллбеков
eval-ить и с самого верху везде передавать коллбек on_error, для сообщения
об ошибке вызывающему.
Как кто вообще с такой проблемой справляется?
Пример:
do_async_call(
on_done => sub { say "yahoo!" },
on_error => sub { $log->write( $_[0] ) },
);
sub do_async_call {
my $self = shift;
my ($data, %cb) = @_;
eval {
if ( $self->{some_flag} ) {
$self->_get_new_data(
on_done => sub {
$self->_sync_save_data( $_[0] ); # <<<< die внутри AE, нужно
тоже eval-ить
},
on_error => $cb{on_error},
}
else {
$self->_sync_save_data( $data ); # <<<< die в eval-е, все ок
}
};
if ($@) {
AE::postpone { $cb{on_error}->( "can't do async call: $@" ) };
}
return;
}
sub _sync_save_data {
die "can't save data";
}
----
С уважением,
Вадим Власов
т.: +7 (916) 424-00-72
--
Moscow.pm mailing list
[email protected] | http://moscow.pm.org