ForgeTotal.js 5
hu

Total.js 5

Szabadítson fel egy streamet a befejezésekor a CLEANUP()-pal

Total.js 5 · total5@0.0.19 streamsfilescleanup Total.js 5-tel lefuttatva

A CLEANUP(stream, [callback]) megvárja, amíg a stream befejeződik (véget ért, lezárták vagy hibával leállt), majd megsemmisíti, ami felszabadítja a mögötte lévő fájlkezelőt vagy socketet. Callback esetén azt ezután hívja meg; callback nélkül egy promise-t ad vissza, amely ebben a pillanatban teljesül. Ezt a hívást érdemes elvégezni, miután egy streamet átadott valaminek, ami olvassa (válasz, pipe, feltöltés), ha biztos akar lenni abban, hogy semmi sem marad nyitva, ha a másik oldal idő előtt leáll.

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 }));
}