Giter Club home page Giter Club logo

part-1-task-2's Introduction

Домашняя работа №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(

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

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

part-1-task-2's People

Contributors

eandreyf avatar v-sopov avatar universome avatar

Watchers

James Cloos avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.