We have this built in motoko: Assigned: ICDevs.org Bounty #39 - Async Flow - One Shot - Motoko - $6,000
It is also being ported to rust at the moment.
I think this pattern is much safer when building with third party canisters as it segments where your state changes and forces you to think in an async manner. It also provides an economic lever for managing cycles as an ack can come loaded with cycles to pay for the op.(this is nice in some use cases)
I’m not saying we don’t need names callbacks, but hopefully in the meantime this can simplify and standardized development.