What version of bluebird is the issue happening on?
What platform and version? (For example Node.js 0.12 or Google Chrome 32)
Node v6.2.1, OS X 10.9.5
Did this issue happen with earlier version of bluebird?
Yes, consistent across v2.x and v3.x
Promise.join's behavior in when it calls the callback (final argument) depends on the state of the promises it's passed. If all promises are resolved, it runs the callback synchronously; but if any of the promises are pending, it runs callback async.