*** Task #1 ***
Создать функцию function sum() { /* ... */ }
var s = sum();
alert(s); // 0
alert(s(1)); // 1
alert(s(1)(2)); //3
alert(s(3)(4)(5)); // 12
Покрыть функцию тестами QUNit
Шаблон для написания тестов https://github.com/jonkemp/qunit-boilerplate
*** Task #2 ***
Создать реализацию Promise. Полностью покрывать спецификацию не нужно. Должна быть подписка на resolve / reject, chain promise, обработка исключений в обработчиках. Дополнительно реализовать .hash / .all для групповой обработки промисов. Функция для создания deferred объектов -- MPromise
( это важно -- после вы будете тестировать свой код тестами коллег )
Сигнатуры:
var p = new MPromise(function(resolve, reject){ /*...*/});
p.then(onResolve, onReject); // both a optional, return new promise object
p.catch(onReject); // call on reject/on fail at handler
Покрыть код тестами Qunit ( разнести тесты и код по разным файлам, чтобы тесты можно было подключать отдельно к любой реализации ). Код пишем по TDD:
-
пишем тест который не проходит
-
пишем код чтобы тест прошел
-
улучшаем код
-
goto п1.
Написать минимум 20 тестов
*** Task #3 ***
-
Написать функцию
sleep
синхронно приостанавливающую выполнение кода. Функция принимает на вход число милисекунд для паузы. Покрыть тестами -
На основе
sleep
написать синхронную функцию обработки числаsyncProcess
, которая выполняется 1 секунду и выводит информацию в консоль -
Написать функцию асинхронной обработки массива
forEachAsync(function callback, waitPrevChunk = false, chunkSize = 1)
. Функция должна возвращать промис с исходным массивом. Добавить функцию ко всем массивам. Покрыть функцию тестами. Проверить на обработке массива из 1000 элементов функциейsyncProcess
из п2