我尝试使用MojoX::Redis,我无法理解如何在变量中捕获结果。如何将MojoX :: Redis分配给变量?
在文档中使用 “打印”
$redis->get(key => sub {
my ($redis, $res) = @_;
print "Value of ' key ' is $res->[0]\n";
})
它的工作,但没用。 如何将结果赋值给“main”程序中的变量?
PS。事实上,我真的不理解这部分的异步范式。
我尝试使用MojoX::Redis,我无法理解如何在变量中捕获结果。如何将MojoX :: Redis分配给变量?
在文档中使用 “打印”
$redis->get(key => sub {
my ($redis, $res) = @_;
print "Value of ' key ' is $res->[0]\n";
})
它的工作,但没用。 如何将结果赋值给“main”程序中的变量?
PS。事实上,我真的不理解这部分的异步范式。
当请求的数据到达时调用该子集。您可以关闭外部变量的匿名子变量以分配变量。
my $result;
$redis->get(key => sub {
my ($redis, $res) = @_;
$result = $res->[0];
});
但要注意该变量是异步填充的,所以它不会立即可用。可能最好的方法是处理匿名子内的结果。
我与作者协商,他给我一个解决方案:
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循环“选址”,并在年底接收数据只。
在mojolicious我得到呈现前收到数据。正如我展示的那样,创建IOloop是必要的。 – Meettya 2011-02-25 21:38:38