Skip to content

hse2016/part-1-task-2

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

20 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Домашняя работа №2: promises

Описание

В этом задании надо будет самим реализовать класс Promise. Задание состоит из 4 частей, в процессе которых мы будем постепенно подпиливать функционал.

Перед тем как приступать к домашнему заданию, рекомендуется прочитать статейку про промисы на MDN (если еще не).

Подготовить систему

  • установить ноду не ниже 6 версии

Часть 1. Основной функционал.

Здесь мы сделаем базовый функционал класса Promise — создание инстанса и с возможностью подписаться на его состояния. В качестве примера попробуем загрузить информацию о нашем дне рождения из ВК и отправить бабкшке по почте.

Часть 2. Статические методы

Здесь нам нужно будет реализовать статические методы: resolve, reject, all, race. Продолжим работать с ВК АПИ, теперь соберем информацию о днях рождениях со всех друзей и запишем себе в коллекцию. Да, не забудем про свой день рождения.

Часть 3. Еще немного статических методов

Еще немного статических методов. Реализовываем самоизобретенные методы queue и stack, которые не входят в спецификацию, но бывают иногда бывают полезны. В качестве примера надо будет в правильном порядке вывести пару стишков. Помните, что если хотя бы один из промисов в очереди или стеке реджектится, то и вся очередь или стек реджектится.

Часть 4. Бонусная

Иногда бывает, что хочется сразу зарезолить промис, да так, чтобы остальные then не выполнялись. Для этого мы придумали токое понятие как complete. Эта функция, которая передается в new Promise(resolve, reject, complete). Это статический что-то (метод, атрибут), когда возвращаешь его, то выполнение всех остальных then прекращается. Например, мы запросили данные пользователя из контакта и если у него не оказалось графы bdate то ничего не делаем, а если есть, то добавляем в homeCollection.

Что делать то?

  1. Форкаем репозиторий
  2. Нужно выполнить npm i
  3. Меняем в lib/SuperPromise.js module.exports = Promise; -> module.exports = SuperPromise;
  4. Делаем коммит
  5. Делаем пулреквест обратно в этот репозиторий
  6. Делаем изменения только в файле lib/SuperPromise.js и проверяем выполняются тестовые примеры npm run task_{N}. Приведенные задания сделаны только для того, чтобы вы попробовали использовать промисы и зафиксили первые ошибки.
  7. Дорабатываем промисы чтобы проходили тесты 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(

Дополнительно

Не нужно создавать приватный репозиторий Делайте форк этого репозитория и пулреквестом отправляйте ваши изменения.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published