Реализуйте функцию `promisify`, которая преобразует callback-based функцию в функцию, возвращающую `Promise`; учтите передачу аргументов и сохранение контекста `this`.

Обёртка возвращает обычную функцию, сохраняет её this и передаёт исходные аргументы вместе с error-first callback в конце.

Короткий ответ

Что ответить на собеседовании

Обёртка возвращает обычную функцию, сохраняет её 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.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее