[Moscow.pm] AnyEvent: die внутри коллбека

Вадим Власов scripter.vrn на gmail.com
Вт Авг 20 07:41:30 PDT 2013


Добрый вечер всем.

Может кто знает, есть ли способ для 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
----------- следущая часть -----------
Вложение в формате HTML было извлечено…
URL: <http://mail.pm.org/pipermail/moscow-pm/attachments/20130820/32fb2a65/attachment.html>


Подробная информация о списке рассылки Moscow-pm