There are a number of options. Have a look at the comments on the article page where people list a few, like Step and FutureJS.
Quite frankly, I've been down that rabbit hole with Twisted which also has most of these primitives. More magic does not help!
I do not want to deal with 'Future-ish object for the purpose of synchronizing other Futures'. Just let me write my code in sequential order where appropriate - which is about 90% of the business logic.
I'll quote jerf from this thread: You shouldn't even have to think about this, let alone argue which way is the best way to do it.
And Larry Wall: The computer should be doing the hard work. That's what it's paid to do, after all.