[Moscow.pm] AnyEvent: die внутри коллбека
Eugene Toropov
eugene.toropov на gmail.com
Вт Авг 20 07:50:00 PDT 2013
Привет,
Как пишет Марк вот здесь - http://search.cpan.org/~mlehmann/AnyEvent-7.04/lib/AnyEvent.pm#ERROR_AND_EXCEPTION_HANDLING - AnyEvent-у наср.ть на это дело :) Ну и там же замечено, что надо смотреть уровнем ниже (EV/Event/etc)
Я как раз юзаю $EV::DIED = sub {}
Евгений
On Aug 20, 2013, at 6:41 PM, Вадим Власов wrote:
> Добрый вечер всем.
>
> Может кто знает, есть ли способ для 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
> moscow-pm на pm.org | http://moscow.pm.org
----------- следущая часть -----------
Вложение в формате HTML было извлечено…
URL: <http://mail.pm.org/pipermail/moscow-pm/attachments/20130820/a9495a51/attachment.html>
Подробная информация о списке рассылки Moscow-pm