Provides a single "defer()" function that returns an object that is both a deferred and a thenable promise. It supports multiple listeners. It does not support promise composition (since "then" returns nothing), forwarding (since "resolve" does not accept further deferred promises), and it does not support error handling (since "then" doesn't accept an errback). It unfortunately does support multiple resolution.
For other variations and design rationales, read: https://github.com/kriskowal/q/tree/master/design