Skip to content

Instantly share code, notes, and snippets.

@skaurus
Last active October 29, 2018 23:18
Show Gist options
  • Save skaurus/63a27c7a30a29697792bdc00ed3fa729 to your computer and use it in GitHub Desktop.
Save skaurus/63a27c7a30a29697792bdc00ed3fa729 to your computer and use it in GitHub Desktop.
Controller::method {
my $promise = Utils::get_me_promise;
return $promise->then(sub ($inner_promise) {
say 'method outer resolved';
return $inner_promise->then(sub ($something) {
say 'method inner resolved';
render $something;
}, sub {
log_error
}
}, sub {
log_error
});
}
Utils::get_me_promise {
my @promises;
for (...) {
push @promises, $ua->post_p->then(sub ($tx) {
return _get_data_from($tx)
});
}
# @promises always non empty
return Mojo::Promise->all(@promises)->then(sub (@data) {
say 'get_me_promise resolved';
return Utils::_get_inner_promise(@data)
});
}
Utils::_get_inner_promise (@data) {
my @promises;
for (...) {
...
}
# @promises could be empty
my $promise = @promises ? Mojo::Promise->all(@promises) : Mojo::Promise->new->resolve;
return $promise->then(sub {
say '_get_inner_promise resolved';
return something-that-should-return-to-controller-method;
});
}
# so, when @promises in _get_inner_promise empty, I get:
# get_me_promise resolved
# _get_inner_promise resolved
# method outer resolved
# I expect:
# get_me_promise resolved
# method outer resolved
# _get_inner_promise resolved
# method inner resolved
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment