如何将MojoX :: Redis结果赋给变量?

时间:2011-02-25 20:36:27

标签: perl asynchronous redis mojolicious

我尝试使用MojoX::Redis,但我无法理解变量的结果。

在使用“print”的文档中

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

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

它有效但无用。 如何将结果分配给“主”程序中的变量?

PS。事实上,我真的不了解这一部分的异步范式。

2 个答案:

答案 0 :(得分:2)

在请求的数据到达时调用sub。您可以从外部关闭变量的匿名子,以便为其分配。

my $result;

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

但请注意该变量是异步填充的,因此它不会立即可用。可能最好的方法是在匿名子中处理结果。

答案 1 :(得分:2)

我咨询了作者,他给了我下一个解决方案:

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循环中“选址”并且最后只接收数据。