Assuming all 4 people want a promotion, there are only 2 slots. It doesn't take a genius to understand that there isn't a solution to fit all ;)
The job of the manager is precisely to get them to swallow the pill. Classic excuse "We didn't get enough promotion slots this year, we will get more next year".
More importantly the initial assumption is wrong, not everybody care about promotion. Some employees expect to be promoted or want to climb up the corporate ladders, some don't. If you can figure those with little aspiration and those with long teeth, that's a good way to direct promotions and maintain a team for longer.
Second thing is to figure out who's likely to leave looking for a promotion elsewhere (both willing and capable to get a job at the next level). A promotion with a 5-10% raise is the best way to make them feel valued and forget about looking elsewhere (even though they could get 30-50% by switching companies).
Last but not least, who's strategic for the team and yourself as the manager? Some people may have rare skills hard to replace, some people may have knowledge of the legacy systems and company internals, some people are just dead weight, some are on really important projects that you need done, others are not. Any combination thereof. Estimate whom to keep in priority.