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