UNPKG

kafka-ts

Version:

**KafkaTS** is a Apache Kafka client library for Node.js. It provides both a low-level API for communicating directly with the Apache Kafka cluster and high-level APIs for publishing and subscribing to Kafka topics.

40 lines (39 loc) 1.15 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.PromiseChain = void 0; class PromiseChain { locks = new Map(); async run(keys, callback) { const orderedKeys = [...new Set(keys)].sort(); const releases = []; for (const key of orderedKeys) { const release = await this.acquire(key); releases.push(release); } try { await callback(); } finally { releases.reverse().forEach((release) => release()); } } async acquire(key) { const previousTail = this.locks.get(key); let release; const currentTail = new Promise((resolve) => (release = resolve)); if (previousTail) { this.locks.set(key, previousTail.then(() => currentTail)); await previousTail; } else { this.locks.set(key, currentTail); } return () => { release(); if (this.locks.get(key) === currentTail) { this.locks.delete(key); } }; } } exports.PromiseChain = PromiseChain;