take advantage of JMVC.Promise to allow async node callback, and the end callback to be called after all