Как присвоить результат MojoX :: Redis переменной? - PullRequest
2 голосов
/ 25 февраля 2011

Я пытаюсь работать с MojoX :: Redis и не могу понять, как результат перехвата в переменной.

В документах используется "печать"

 $redis->get(key => sub {
      my ($redis, $res) = @_;

      print "Value of ' key ' is $res->[0]\n";
  })

Это работало, но бесполезно. Как я могу присвоить результат переменной в «основной» программе?

PS. Действительно, я действительно не понимаю асинхронную парадигму в этой части.

Ответы [ 2 ]

2 голосов
/ 26 февраля 2011

Я консультируюсь с автором, и он дает мне следующее решение:

my $data_out;

my $redis = $redis->ioloop(Mojo::IOLoop->new);

$redis->get( $user_query => sub {
      my ($redis, $res) = @_;

      $data_out = $res->[0];
      $redis->stop;
  });

 $redis->start;

 $self->render( text => "|$data_out|" );

полный текст в gist

Полагаю, без нового ioloop Redis "размещен" наMojolicious цикл и получать данные только в конце.

2 голосов
/ 25 февраля 2011

Sub вызывается при поступлении запрошенных данных. Вы можете закрыть анонимную подпрограмму вокруг переменной извне, чтобы назначить ее.

my $result;

$redis->get(key => sub {
    my ($redis, $res) = @_;
    $result = $res->[0];
});

Но обратите внимание, что эта переменная заполняется асинхронно, поэтому она не будет доступна сразу. Вероятно, лучший подход - это обработать результат в анонимной подпрограмме.

...