Перед выполнением задания внимательно прочитайте:
- О всех этапах проверки задания
- Как отправить пулл
- Как пройти тесты
- Правила оформления javascript, HTML и CSS кода
Мы очень хотим, чтобы код вы написали сами, а не пользовались внешними библиотеками.
Интернет-магазин бабуленьки набирает популярность, количество котиков
непрерывно растёт и пора начать где-то хранить данные о них. Бабуленька любит
всё старомодное, поэтому хранить мы будем в старых-добрых файлах в папке /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 и в тестах.
Перед выполнением внимательно прочитайте про особенности
Ещё парочка полезных методов:
flow.mapLimit(['value1', 'value2'], limit, func, callback)
Аналог map
, но ограничивает количество одновременно выполняемых операций параметром limit
.
flow.filterLimit(['value1', 'value2'], limit, func, callback)
Аналог filter
, но ограничивает количество одновременно выполняемых операций параметром limit
.
Примеры использования этих методов можно посмотреть в index.js и в тестах.