const promiseOrCallback = function(func, callback) { return new Promise(async (resolve, reject) => { try { const data = await func(); if (typeof callback == "function") { return callback(null, data); } return resolve(data); } catch (err) { if (typeof callback == "function") { return callback(err, null); } return reject(err); } }); }; const foo = (a, b, callback) => { return promiseOrCallback(function() { return new Promise((resolve, reject){ return resolve(a + b); }); }, callback); }