and i bet there is a nicer way of doing that,
for once, you can do both, return a promise and call the callback(if given, set it by default to an empty func)