promisify возвращает обычную функцию, которая передаёт исходные аргументы и error-first callback, а результат callback превращает в resolve или reject.
Нужно написать функцию, которая возвращает функцию, принимающую любые аргументы, и оборачивает callback (с колбэк-стилем error-first) в промис (promisify).
promisify возвращает обычную функцию, которая передаёт исходные аргументы и error-first callback, а результат callback превращает в resolve или reject.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
promisify возвращает обычную функцию, которая передаёт исходные аргументы и error-first callback, а результат callback превращает в resolve или reject.
function promisify(fn) {
return function (...args) {
const context = this;
return new Promise((resolve, reject) => {
fn.call(context, ...args, (error, value) => {
if (error != null) reject(error);
else resolve(value);
});
});
};
}
Здесь контракт — callback(error, value), успешная ошибка равна null/undefined. Синхронное исключение внутри executor тоже отклоняет Promise. Для навсегда привязанного метода используйте bind; несколько успешных аргументов требуют отдельной договорённости о результате.