AnyEvent-Promises
view release on metacpan or search on metacpan
lib/AnyEvent/Promises/Deferred.pm view on Meta::CPAN
return wantarray? @res: $res[0];
}
# can be used with AnyEvent < 6 having no postpone
my $postpone;
if (defined &AE::postpone){
$postpone = \&AE::postpone;
}
else {
my $POSTPONE_W;
my @POSTPONE;
my $postpone_exec = sub {
undef $POSTPONE_W;
&{ shift @POSTPONE } while @POSTPONE;
};
$postpone = sub {
push @POSTPONE, shift;
$POSTPONE_W ||= AE::timer( 0, 0, $postpone_exec );
();
};
};
sub _do_then {
my ( $this, $d, $on_fulfill, $on_reject ) = @_;
my $rejected = $this->{state} == 2;
my ( $value, $reason ) = @$this{qw(value reason)};
if ( my $f = $rejected ? $on_reject : $on_fulfill ) {
$postpone->(sub {
my @values = eval { $f->( $rejected ? $reason : @$value ) };
if ( my $err = $@ ) {
$d->reject($err);
}
elsif (@values == 1
&& blessed( $values[0] )
&& $values[0]->can('then') )
{
$values[0]->then(
sub { $d->resolve(@_); return; },
sub { $d->reject(@_); return; }
);
}
else {
$d->resolve(@values);
}
});
}
elsif ($rejected) {
$d->reject($reason);
}
else {
$d->resolve(@$value);
}
}
1;
# vim: expandtab:shiftwidth=4:tabstop=4:softtabstop=0:textwidth=78:
__END__
=pod
=head1 NAME
AnyEvent::Promises::Deferred - deferred and promises objects
=head1 VERSION
version 0.06
=head1 DESCRIPTION
No user servicable parts here. See L<AnyEvent::Promises> for documentation.
=head1 AUTHOR
Roman Daniel <roman.daniel@davosro.cz>
=head1 COPYRIGHT AND LICENSE
This software is copyright (c) 2014 by Roman Daniel.
This is free software; you can redistribute it and/or modify it under
the same terms as the Perl 5 programming language system itself.
=cut
( run in 0.392 second using v1.01-cache-2.11-cpan-5b529ec07f3 )