Промисификация

В этой задаче нужно реализовать функцию-декоратор promisify. Она принимает классическую асинхронную функцию на колбэках, а возвращает функцию, возвращающую промис.

Пример

Рассмотрим пример функции на колбэках. Функция sum принимает три аргумента. Первые два — a и b — сущностные, это числа которые нужно сложить. Последний — cb — технический. Это колбэк, который вызывается с результатом работы функции, когда она завершила работу.

Колбэк принимает два аргумента: err и result. Если функция завершилась успешно, то err равен null, а result — сумме чисел. Если произошла ошибка, err равен какому-то значению, отличному от null, а result равен undefined.

// sum — пример реализации такой функции function sum(a, b, cb) { setTimeout(() => { if (Math.random() < .5) { cb(null, a + b); // success } else { cb("error"); // bad luck } }, 0); } // как бы мы ее использовали sum(2, 5, (err, result) => { if (err === null) { console.log(result); // 7 } });

Теперь вызовем promisify от нашей устаревшей функции sum. Она вернет новую функцию, которая принимает только два аргумента и возвращает промис.

const promisifiedSum = promisify(sum); // как мы работаем с асинхронными функциями на сегодняшний день promisifiedSum(3, 4).then( value => console.log(value), // 7 reason => console.log(reason), // "error" );