1. Очень ысбтрый
2. promisify получает функцию `fn` и возврщает функцию, которая возвращает внутри промис, который внутри себя вызывает `fn` c `arguments` + функция, которая получает другой `arguments` и смотрит, если arguments[0] (err) не равно null, то reject-ит промис этим err, иначе resolv-ит промис аргументами
Примерно так выглядит:
const promisify = fn => (...args) => new Promise((resolve, reject) => {
fn(...args, (err, ...nextargs) => {
if (err) return reject(err)
return resolve(...nextargs)
})
})
Код promisify выглядит чуть по-другому и там всякие-разные проверки, но то, что я привел является наглядным примером того, как выглядит promisify.