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
JavaScript
;
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;