Zwolnij strumień po jego zakończeniu za pomocą CLEANUP()
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.
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 }));
}