В этом задании надо будет самим реализовать класс Promise
. Задание состоит из 4 частей, в процессе которых мы будем постепенно подпиливать функционал.
Перед тем как приступать к домашнему заданию, рекомендуется прочитать статейку про промисы на MDN (если еще не).
- установить ноду не ниже 6 версии
Здесь мы сделаем базовый функционал класса Promise
— создание инстанса и с возможностью подписаться на его состояния.
В качестве примера попробуем загрузить информацию о нашем дне рождения из ВК и отправить бабкшке по почте.
Здесь нам нужно будет реализовать статические методы: resolve
, reject
, all
, race
.
Продолжим работать с ВК АПИ, теперь соберем информацию о днях рождениях со всех друзей и запишем себе в коллекцию. Да, не забудем про свой день рождения.
Еще немного статических методов. Реализовываем самоизобретенные методы queue
и stack
, которые не входят в спецификацию, но бывают иногда бывают полезны.
В качестве примера надо будет в правильном порядке вывести пару стишков. Помните, что если хотя бы один из промисов в
очереди или стеке реджектится, то и вся очередь или стек реджектится.
Иногда бывает, что хочется сразу зарезолить промис, да так, чтобы остальные then
не выполнялись.
Для этого мы придумали токое понятие как complete
. Эта функция, которая передается в new Promise(resolve, reject, complete)
.
Это статический что-то (метод, атрибут), когда возвращаешь его, то выполнение всех остальных then
прекращается.
Например, мы запросили данные пользователя из контакта и если у него не оказалось графы bdate
то ничего не делаем, а если
есть, то добавляем в homeCollection
.
- Форкаем репозиторий
- Нужно выполнить
npm i
- Меняем в
lib/SuperPromise.js
module.exports = Promise;
->module.exports = SuperPromise;
- Делаем коммит
- Делаем пулреквест обратно в этот репозиторий
- Делаем изменения только в файле
lib/SuperPromise.js
и проверяем выполняются тестовые примерыnpm run task_{N}
. Приведенные задания сделаны только для того, чтобы вы попробовали использовать промисы и зафиксили первые ошибки. - Дорабатываем промисы чтобы проходили тесты
npm run test_base
В обязательную часть входят базовые использования промисов.
Короче, нужно чтобы проходили тесты командой npm run test_base
В продвинутую часть входит полный функционал промисов.
Короче, нужно чтобы проходили тесты командой npm run test_advanced
Бонусная часть, только для функционала complete
запускается npm run test_bonus
Прогнать вообще все тесты можно с помощью npm test
Если вы ещё не успели поменять Promise
на SuperPromise
то можете запустить тресты прямо сейчас, т.к. встроенные промисы проходят эти тесты.
Чтобы запустить только один тест добавте .only
, например describe.only(
или specify.only(
Не нужно создавать приватный репозиторий Делайте форк этого репозитория и пулреквестом отправляйте ваши изменения.