only build a promise if a cb was not passed in. Fixes #708