@engine9/packet-tools
Version:
Tools for dealing with Engine9 packets
49 lines (39 loc) • 1.32 kB
JavaScript
/* eslint-disable no-console */
const {
setTimeout,
} = require('node:timers/promises');
const { describe } = require('node:test');
// const assert = require('node:assert');
const { Readable } = require('node:stream');
const { createWriteStream } = require('node:fs');
const { pipeline } = require('node:stream/promises');
const ParallelStream = require('../ParallelStream');
const { getTempFilename } = require('../index');
describe('Should process items in parallel:', async () => {
const outputFile = await getTempFilename({});
const writeStream = createWriteStream(outputFile);
const CONCURRENCY = 500;
await pipeline(
Readable.from(
[...Array(1000)].map((v, i) => ({ i })),
),
new ParallelStream(
CONCURRENCY,
async (obj, enc, push, done) => {
let res;
try {
await setTimeout(Math.random() * 1000);
if (Math.random() > 0.7) throw new Error('Random error');
res = `${obj.id} is complete\n`;
} catch (err) {
await setTimeout(Math.random() * 2000);// longer timeouts for errors
res = `${obj.id} is error, ${err.name}\n`;
}
done(null, obj.id); // _onComplete actually
return res;
},
),
writeStream,
);
console.log('Wrote responses to ', outputFile);
});