我尝试使用MojoX::Redis,但我无法理解变量的结果。
在使用“print”的文档中
$redis->get(key => sub {
my ($redis, $res) = @_;
print "Value of ' key ' is $res->[0]\n";
})
它有效但无用。 如何将结果分配给“主”程序中的变量?
PS。事实上,我真的不了解这一部分的异步范式。
答案 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|" );
中的全文
我想如果没有新的ioloop,Redis会在Mojolicious循环中“选址”并且最后只接收数据。