1.0.0 • Published 7 years ago

flow.gallyam v1.0.0

Weekly downloads
4
License
-
Repository
-
Last release
7 years ago

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

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

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

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

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

npm.io