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

发布于 2024-10-19 01:39:38 字数 356 浏览 7 评论 0原文

我尝试使用 MojoX::Redis ,但我无法理解如何捕获结果产生一个变量。

在文档中使用“print”

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

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

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

附言。事实上,我真的不理解这部分的异步范例。

I try to work with MojoX::Redis and I can`t understand how catch result in a variable.

In docs used "print"

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

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

It worked, but useless.
How I can assign result to a variable in "main" program?

PS. Indeed I really don`t understand asynchronous paradigm on this part.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

鹿港小镇 2024-10-26 01:39:38

当请求的数据到达时,子函数被调用。您可以从外部关闭变量周围的匿名子以对其进行分配。

my $result;

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

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

The sub is called when requested data arrives. You can close anonymous sub around variable from the outside to get it assigned.

my $result;

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

But pay attention to that variable is filled asynchronously, so it will not be immediately available. Probably best approach is to process result within the anonymous sub.

‖放下 2024-10-26 01:39:38

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

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 循环上并仅在最后接收数据。

I consult with author and he give me next solution :

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|" );

full text in gist

I suppose without new ioloop Redis is "sited" on Mojolicious loop and receive data at the end only.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文