2

MojoX::Redisを使用しようとしていますが、catch がどのように変数になるのか理解できません。

ドキュメントでは「印刷」を使用

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

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

うまくいきましたが、役に立ちませんでした。「メイン」プログラムの変数に結果を割り当てるにはどうすればよいですか?

PS。実際、私はこの部分の非同期パラダイムを本当に理解していません。

4

2 に答える 2

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 ループに「配置」され、最後にのみデータを受信すると思います。

于 2011-02-25T21:44:56.803 に答える
2

要求されたデータが到着すると、サブルーチンが呼び出されます。外部から変数の周りの匿名サブを閉じて、割り当てられるようにすることができます。

my $result;

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

ただし、変数は非同期で入力されるため、すぐには使用できないことに注意してください。おそらく最善の方法は、匿名サブ内で結果を処理することです。

于 2011-02-25T20:43:12.173 に答える