ForgeTotal.js 5
sv

Total.js 5

Frigör en ström när den slutar med CLEANUP()

Total.js 5 · total5@0.0.19 streamsfilescleanup Körd med Total.js 5

CLEANUP(stream, [callback]) väntar tills en ström är klar (den tog slut, stängdes eller misslyckades) och förstör den sedan, vilket frigör filhandtaget eller socketen bakom den. Med en callback anropas den efteråt; utan callback returnerar funktionen ett löfte som löses vid den tidpunkten. Det är anropet man gör efter att ha lämnat över en ström till något som läser den (ett svar, en pipe, en uppladdning) när man vill vara säker på att inget förblir öppet om den andra sidan slutar i förtid.

controllers/streams.js
const Fs = require('fs');
const { PassThrough } = require('stream');

exports.install = function() {
	ROUTE('GET /copy/', copy);
	ROUTE('GET /copy-callback/', copycallback);
};

async function copy($) {

	const file = PATH.tmp('cleanup.txt');
	Fs.writeFileSync(file, 'some text to read');

	const stream = Fs.createReadStream(file);
	const chunks = [];

	// a sink that reads everything
	const sink = new PassThrough();
	sink.on('data', chunk => chunks.push(chunk));
	stream.pipe(sink);

	const before = stream.destroyed;
	await CLEANUP(stream);

	$.json({ before: before, after: stream.destroyed, content: Buffer.concat(chunks).toString() });
}

function copycallback($) {

	const file = PATH.tmp('cleanup.txt');
	Fs.writeFileSync(file, 'again');

	const stream = Fs.createReadStream(file);
	stream.resume();

	CLEANUP(stream, () => $.json({ destroyed: stream.destroyed }));
}