promisify the whole thing up