Metasync — асинхронная композиция

Библиотека Metarhia для асинхронного программирования: композиция функций, коллекторы, очереди, примитивы. Альтернатива async/await + библиотеке async.

Зачем

автор: callback'и быстро, но pyramid of doom. async/await удобно, но «теряется понимание, что происходит». Библиотека async тоже строит пирамиды. Нужны композиторы.

Контракт error-first callback

Стандартный Node-контракт:

fn(arg1, arg2, (err, result) => { ... });
  • callback — последний аргумент
  • error — первый аргумент в callback
  • data — второй

Metasync использует и расширяет этот контракт.

Композиция функций

const sequential = metasync.sequential([fn1, fn2, fn3]);
const parallel = metasync.parallel([fn1, fn2, fn3]);

sequential((err, result) => { /* ... */ });
parallel((err, result) => { /* ... */ });
  • sequential — выполнить по очереди.
  • parallel — параллельно, ждать все.
  • composition — DAG из функций с зависимостями.

Коллекторы

Собирают результаты нескольких асинхронных операций.

const dc = metasync.collect(3);
dc.pick('user', userData);
dc.pick('posts', postsData);
dc.pick('comments', commentsData);
dc.done((err, data) => {
  // data.user, data.posts, data.comments
});
  • collect(N) — ждёт N значений.
  • collect(keys) — ждёт по ключам.

Async-очередь

const queue = metasync.queue(concurrency);
queue.add(task);
queue.add(task);
// выполняются с лимитом concurrency

С приоритетами, паузой, drain-событиями.

Примитивы

  • do — chain функций.
  • each / eachSeries — итерация массива.
  • map / mapSeries — преобразование с асинхронной функцией.
  • reduce — свёртка асинхронно.
  • memoize — кэширование с асинхронным getter.
  • throttle, debounce — стандартные.

Чем лучше Promise

  • Контроль над flow — не теряется явность как с await.
  • Композиция — можно строить графы зависимостей (DAG), не только sequential/parallel.
  • Меньше боли с обработкой ошибок — error-first callback'и стандартизированы.

В современном коде многое уже делается через async/await. Metasync остаётся для сложной координации.

🎓 Источники

  • 🎓 Архив 2017 — MetaSync · 2019-12-28
    • Цитата: «Metasync — это библиотека для синхронного программирования, которая содержит целый ряд абстракций.»

См. также