# Zwolnij strumień po jego zakończeniu za pomocą CLEANUP()

> Użyj CLEANUP(), aby zniszczyć strumień zaraz po jego zakończeniu lub błędzie, tak aby nie zostały otwarte uchwyty plików, z callbackiem lub jako obietnicę.

Framework: total5
Product: Total.js 5 (total5@0.0.19)
Language: pl
Content-SHA256: f5e7628fe4511887876f863483b02bd9c582b9eef023bca5fcf1ce1de76d2fc7
Snapshot: c0700e321579725c5cf4f5ace1ad7d2866d1b4f93c24a63c0b41b6b7998e976c
Sources: total5-installed@total5@0.0.19
Review: not-recorded

`CLEANUP(stream, [callback])` czeka, aż strumień się **zakończy** (skończył się, został zamknięty lub zakończył się błędem), a następnie go niszczy, co zwalnia stojący za nim uchwyt pliku lub gniazdo. Z callbackiem jest on wywoływany po tym kroku; bez niego funkcja zwraca obietnicę, która rozwiązuje się w tym momencie. To wywołanie, które warto wykonać po przekazaniu strumienia czemuś, co go czyta (odpowiedzi, pipe, uploadowi), gdy chcesz mieć pewność, że nic nie zostanie otwarte, jeśli druga strona zatrzyma się wcześniej.

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