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