This is probably not the answer you're looking for, but you could look into ways that make callbacks enjoyable. The syntactic sugar provided by CoffeeScript goes a long way to make readable (and, dare I say, elegant) what would be a tangled mess in straight up JavaScript:
# Get profiles LIST as JSON
.post "/list", (req, res) ->
db.maria.query getProfilesQuery, { userId: req.session.passport.user }, false
.on "result", (result) ->
rows = []
res.status(200)
result
.on "row", (row) -> rows.push row
.on "error", (error) -> logger.warn error
.on "end", ->
res.json rows
res.end()
5 callbacks here but they don't impede readability.