There are patterns for solving async tasks. Not just promise vs callback. Real problems and real patterns
Problem example 1.
Send messages to a service that give reply async, store data into an array of promises, solve all promises at the end. Additional constraint: the number of message that could be sent to the service is limited, and the only way to test if the limit is reached is to catch an exception on failed sent.
i.e.