Απελευθερώστε ένα stream όταν τελειώσει με το CLEANUP()
Το CLEANUP(stream, [callback]) περιμένει να τελειώσει ένα stream (έφτασε στο τέλος, έκλεισε ή απέτυχε) και μετά το καταστρέφει, κάτι που απελευθερώνει τον δείκτη αρχείου ή το socket που βρίσκεται πίσω του. Με callback, αυτό καλείται μετά· χωρίς callback επιστρέφει ένα promise που επιλύεται εκείνη τη στιγμή. Είναι η κλήση που κάνετε αφού παραδώσετε ένα stream σε κάτι που το διαβάζει (μια απάντηση, ένα pipe, μια μεταφόρτωση) όταν θέλετε να είστε βέβαιοι ότι τίποτα δεν μένει ανοιχτό αν η άλλη πλευρά σταματήσει νωρίτερα.
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 }));
}