# setting up guard
Mojo::IOLoop->timer(
  5 => sub {
    $self->render(text => "ERR! Too long");
    $guard++;
  },
);

# running request
Mojo::IOLoop->delay(
  sub {
    my($delay) = @_;

    # no idea how long this takes
    $obj->get($delay->begin);
  },
  sub {
    my($delay, $data) = @_;

    return if $guard;
    return $self->render(text => $data);
  },
);