Promise library.  Were I starting out today, I'd just use Q.