Реализуйте функцию promisify: она принимает функцию с error-first callback (loadScript) и возвращает новую функцию, которая принимает любые аргументы, добавляет error-first callback и оборачивает вызов в Promise.

Верните обычную функцию, которая передаёт исходные аргументы и callback внутрь Promise, сохраняя this вызывающей стороны.

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

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

Верните обычную функцию, которая передаёт исходные аргументы и callback внутрь Promise, сохраняя this вызывающей стороны.

Подробный разбор

Ответ с пояснениями

Верните обычную функцию, которая передаёт исходные аргументы и callback внутрь Promise, сохраняя this вызывающей стороны.

Предполагается последний аргумент error-first callback (error, result) с одним результатом и null/undefined при успехе.

function promisify(fn) {
  return function (...args) {
    return new Promise((resolve, reject) => {
      fn.call(this, ...args, (error, result) => {
        if (error != null) reject(error);
        else resolve(result);
      });
    });
  };
}

Синхронный throw внутри вызова тоже отклонит Promise. Ошибку, выброшенную позже внутри таймера вместо вызова callback, такая обёртка перехватить не может.

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

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

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

Подробнее