我嘗試使用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