Обёртка callback-функции в Promise (Promisify Callback Function)
3
Асинхронность
Дана функция asyncFn, принимающая единственный аргумент — callback. Сама asyncFn вызывает этот callback асинхронно (через микротаск, без реального ожидания по времени) с двумя аргументами: err и data. Если при выполнении произошла ошибка, err содержит её значение, а data — undefined. Если ошибки нет, err равен null, а data содержит результат.
Нужно реализовать функцию promisify(asyncFn), которая возвращает новую функцию. При вызове эта новая функция должна вызвать asyncFn, передать ей колбэк, и вернуть Promise, который:
резолвится значением
data, если ошибки не было;реджектится значением
err, если ошибка произошла.
Входные данные: asyncFn — функция вида (callback) => void, где callback(err, data) вызывается ровно один раз.
Выходные данные: функция, при вызове возвращающая Promise, который резолвится или реджектится в зависимости от поведения asyncFn.
Ограничения:
asyncFnвызываетcallbackровно один раз (либо с ошибкой, либо с данными)Реальные задержки (
setTimeoutс ожиданием) не используются — только микротаски, чтобы результат был детерминирован
Пример:
Вход: asyncFn = (cb) => Promise.resolve().then(() => cb(null, 42))
Выход: promisify(asyncFn)() → resolve(42)
Вход: asyncFn = (cb) => Promise.resolve().then(() => cb("Ошибка сети"))
Выход: promisify(asyncFn)() → reject("Ошибка сети")