利用闭包与代理的特性,将目标函数转化为promise对象。
function promisify(target, ctx = null) {if (typeof target !== "function") {throw TypeError(`Expected target function. Received ${getType(target)}`)}return function(...args) {ctx || (ctx = this)return new Promise((resolve, reject) => {const fulfill = (err, res) => err ? reject(err) : resolve(res)target.call(ctx, ...args, fulfill)})}}
参考:https://github.com/octet-stream/promisify/blob/master/promisify.js
