Skip to content

Grehhov/javascript-task-8

 
 

Repository files navigation

Задача «Котофайлы»

Перед выполнением задания внимательно прочитайте:

Основное задание

Мы очень хотим, чтобы код вы написали сами, а не пользовались внешними библиотеками.

Интернет-магазин бабуленьки набирает популярность, количество котиков непрерывно растёт и пора начать где-то хранить данные о них. Бабуленька любит всё старомодное, поэтому хранить мы будем в старых-добрых файлах в папке /data.

Вот, например, данные о коте «Батончике»:

{
    "name": "batonchik",
    "price": 99000
}

К счастью, в Node.JS много методов для работы с файлами:

Но они асинхронные, а значит нужна библиотека для удобной работы с ними flow.js:

flow.serial([func1, func2], callback)
serial запускает асинхронные функции в массиве последовательно. Результат одной функции передаётся в следующую. Помимо результата функция получает колбэк. Колбэк принимает первым параметром ошибку, а вторым – данные для следующей функции. Если любая из функций передает в колбэк ошибку, то следующая не выполняется, а вызывается основной callback.

flow.map(['value1', 'value2'], func, callback)
map запускает функцию func с каждым значением параллельно. Эта функция принимает значение из массива и колбэк. Значения обрабатываются функцией и собираются в массив, который передается в основной callback при завершении всех запусков.

flow.filter(['value1', 'value2'], func, callback)
filter запускает функцию с каждым значением параллельно. Функция принимает значение из массива и колбэк. Значения фильтруются функцией и собираются в массив, который передается в основной callback при завершении всех запусков.

flow.makeAsync(func) Функция превращает синхронную функцию в асинхронную. Например:

flow.serial([
    function (next) {
        fs.readFile('./cats/barsik.json', next);
    },
    flow.makeAsync(JSON.parse)
], function (err, parsedJson) {
    console.info(parsedJson);
});

Пример работы с подробными комментариями можно традиционно найти в index.js и в тестах.

Дополнительное задание (+27 к концентрации)

Перед выполнением внимательно прочитайте про особенности

Ещё парочка полезных методов:

flow.mapLimit(['value1', 'value2'], limit, func, callback)
Аналог map, но ограничивает количество одновременно выполняемых операций параметром limit.

flow.filterLimit(['value1', 'value2'], limit, func, callback)
Аналог filter, но ограничивает количество одновременно выполняемых операций параметром limit.

Примеры использования этих методов можно посмотреть в index.js и в тестах.

About

Задача «Котофайлы»

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • JavaScript 100.0%