JavaScript: Промисы: reject
CustomPromise.js
Это испытание является продолжением предыдущего и расширяет функционал функции executor
, добавлением колбека reject(data)
.
Реализуйте в классе CustomPromise
конструктор, принимающий колбек executor(resolve, reject)
и метод then(onFulfill, onReject)
. Задачи resolve(data)
и reject(error)
должны выполняться асинхронно.
Алгоритм
Вам понадобится последнее, третье состояние, чтобы запускать реакции, накопленные по соответствующему состоянию промиса, сам объект с состояниями теперь можно реализовать внутри конструктора.
Можно копировать решение учителя из предыдущего испытания и расширять его. В решении должны отсутствовать встроенные Promise и ключевое слово async
. Только таймеры и вызовы функций из функций.
Метод catch сейчас реализовывать не нужно, пусть всё попадает в then.
Примеры использования
import CustomPromise from '../CustomPromise.js';
const promise = new CustomPromise((resolve, reject) => reject('Hello, world!'));
promise
.then((value) => {
console.log(value); // Данный обработчик будет пропущен
});
// для упрощения решения данные из reject передавайте в resolve
const result = await promise.then((x) => x.toUpperCase());
console.log(result); // 'HELLO, WORLD!'
Подсказки
Изучите кейсы использования в тестах, они опираются на возможности промисов из документации.
Если почувствуете, что нужны дополнительные материалы:
- описание стандарта, который имплементируется в упражнении
- курс "Синхронная асинхронность", чуть глубже погружающий в тему
- курс "Автоматное программирование" о конечных автоматах, чем является промис
Для полного доступа к испытанию нужен базовый план
Базовый план откроет полный доступ ко всем курсам, упражнениям и урокам Хекслета, проектам и пожизненный доступ к теории пройденных уроков. Подписку можно отменить в любой момент.