1. function promisify(fn) {
    2. if (fn && typeof fn !== 'function') return
    3. return (...args) => {
    4. return new Promise((resolve, reject) => {
    5. args.push(function cb(err, ...values) {
    6. if (err) return reject(err)
    7. return resolve(...values)
    8. })
    9. fn.call(this, ...args)
    10. })
    11. }
    12. }