huntMen =(buffy)->
soulmates =(buffy, cb, mates=[])->
getMatches buffy, 10, (userids)->
for u in userids
do (u)->
getThumbnail u, (thumb)->
isPicAVampire thumb, (is_vamp)->
unless is_vamp
getPersonality u, (personality)->
getLastTalked u, match, (last_talked)->
soulmates.push userid: u, thumb, personality, last_talked
if soulmates.length >= 10
cb(mates)
else soulmates(buffy, cb, mates)
else soulmates(buffy, cb, mates)
soulmates buffy, (soulmates)->
#Do whatever you need to with soulmates
Obviously it's still more of a hassle to deal with than a more featurey async library, but there isn't quite the panic of trying to do the same thing in JS.Edit: For comparison, the Tame.JS style transliterates to ~15 lines of CS— but presumably that would compile to dozens more lines of JavaScript.
In exchange, it is lying to you about what the program is actually doing, as opposed to the callback syntax which obscures nothing. So yeah, not surprised if you don't get too much traction with examples like that.