Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
fix rejection chains
  • Loading branch information
kraih committed Oct 25, 2017
1 parent bbe18c3 commit 9190e88
Show file tree
Hide file tree
Showing 2 changed files with 14 additions and 5 deletions.
8 changes: 4 additions & 4 deletions lib/Mojo/IOLoop/Delay.pm
Expand Up @@ -110,11 +110,11 @@ sub _clone {
sub _defer {
my $self = shift;

return unless my $result = $self->{result};
my $cbs = $self->{status} eq 'resolve' ? $self->{resolve} : $self->{reject};
@$self{qw(resolve reject)} = ([], []);
my $results = $self->{result};
@{$self}{qw(resolve reject)} = ([], []);

$self->ioloop->next_tick(sub { $_->(@$results) for @$cbs });
$self->ioloop->next_tick(sub { $_->(@$result) for @$cbs });
}

sub _settle {
Expand Down Expand Up @@ -166,7 +166,7 @@ sub _wrap {
->then(sub { $new->resolve(@_); () }, sub { $new->reject(@_); () });
}

else { $new->resolve(@result) }
else { $new->$method(@result) }
};
}

Expand Down
11 changes: 10 additions & 1 deletion t/mojo/delay.t
Expand Up @@ -66,7 +66,7 @@ Mojo::IOLoop->one_tick;
is_deeply \@results, ['pass'], 'promise resolved';
is_deeply \@errors, [], 'promise not rejected';

# Promise (chained)
# Promise (resolved chained)
$delay = Mojo::IOLoop::Delay->new;
@results = ();
$delay->then(sub {"$_[0]:1"})->then(sub {"$_[0]:2"})->then(sub {"$_[0]:3"})
Expand All @@ -75,6 +75,15 @@ $delay->resolve('test');
Mojo::IOLoop->one_tick;
is_deeply \@results, ['test:1:2:3:4'], 'promises resolved';

# Promise (rejected chained)
$delay = Mojo::IOLoop::Delay->new;
@errors = ();
$delay->then(undef, sub {"$_[0]:1"})->then(undef, sub {"$_[0]:2"})
->then(undef, sub {"$_[0]:3"})->then(undef, sub { push @errors, "$_[0]:4" });
$delay->reject('tset');
Mojo::IOLoop->one_tick;
is_deeply \@errors, ['tset:1:2:3:4'], 'promises rejected';

# Promise (resolved nested)
$delay = Mojo::IOLoop::Delay->new;
my $delay2 = Mojo::IOLoop::Delay->new;
Expand Down

0 comments on commit 9190e88

Please sign in to comment.