Giter Site home page Giter Site logo

javascript-task-8's Introduction

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

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

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

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

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

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.