BlueT
10/5/2011 - 6:50 AM

AE::cv recurse blocking in Mojolicious Helpers with multiple MojoX::Redis

# Add "get_board_info" helper
	$app->helper(
		get_board_info => sub {
			my $c = shift;
			my $data_id = shift;
			my @keys = @_;
			my $aecv = AE::cv;
			
			my %data;
			$aecv->begin (sub { shift->send(\%data) });	# Outer CV
			
			for my $key (@keys) {
				$aecv->begin;	# Job CV
				Conifer->redis->get("board:$data_id:$key" => sub {
					my ($redis, $res) = @_;
					$data{$key} = $res->[0];
					$aecv->end;
				});
			}
			
			$aecv->end;	# Outer CV
			$aecv->recv;	# non-blocking wait for all jobs
			return ( \%data );
		}
	);
# AEcv recurse blocking in Mojolicious Helpers with multiple MojoXRedis

# Add "get_board_info" helper
	$app->helper(
		get_board_info => sub {
			my $c = shift;
			my $data_id = shift;
			my @keys = @_;
			my $aecv = AE::cv;
			
			my %data;
			$aecv->begin (sub { shift->send(\%data) });	# Outer CV
			
			for my $key (@keys) {
				$aecv->begin;	# Job CV
				Conifer->redis->get("board:$data_id:$key" => sub {
					my ($redis, $res) = @_;
					$data{$key} = $res->[0];
					$aecv->end;
				});
			}
			
			$aecv->end;	# Outer CV
			$aecv->recv;	# non-blocking wait for all jobs
			return ( \%data );
		}
	);