UNPKG

kafkajs

Version:

A modern Apache Kafka client for node.js

41 lines (34 loc) 932 B
/** * @typedef {(batch: T, metadata: { workerId: number }) => Promise<void>} Handler * @template T * * @typedef {ReturnType<typeof createWorker>} Worker */ const sharedPromiseTo = require('../utils/sharedPromiseTo') /** * @param {{ handler: Handler<T>, workerId: number }} options * @template T */ const createWorker = ({ handler, workerId }) => { /** * Takes batches from next() until it returns undefined. * * @param {{ next: () => { batch: T, resolve: () => void, reject: (e: Error) => void } | undefined }} param0 * @returns {Promise<void>} */ const run = sharedPromiseTo(async ({ next }) => { while (true) { const item = next() if (!item) break const { batch, resolve, reject } = item try { await handler(batch, { workerId }) resolve() } catch (error) { reject(error) } } }) return { run } } module.exports = createWorker