Module

std/node/stream.ts>finished

Deno standard library
Go to Latest
namespace finished
import { finished } from "https://dotland.deno.dev/std@0.177.0/node/stream.ts";
function finished
import { finished } from "https://dotland.deno.dev/std@0.177.0/node/stream.ts";

A function to get notified when a stream is no longer readable, writable or has experienced an error or a premature close event.

const { finished } = require('stream');

const rs = fs.createReadStream('archive.tar');

finished(rs, (err) => {
  if (err) {
    console.error('Stream failed.', err);
  } else {
    console.log('Stream is done reading.');
  }
});

rs.resume(); // Drain the stream.

Especially useful in error handling scenarios where a stream is destroyed prematurely (like an aborted HTTP request), and will not emit 'end'or 'finish'.

The finished API provides promise version:

const { finished } = require('stream/promises');

const rs = fs.createReadStream('archive.tar');

async function run() {
  await finished(rs);
  console.log('Stream is done reading.');
}

run().catch(console.error);
rs.resume(); // Drain the stream.

stream.finished() leaves dangling event listeners (in particular'error', 'end', 'finish' and 'close') after callback has been invoked. The reason for this is so that unexpected 'error' events (due to incorrect stream implementations) do not cause unexpected crashes. If this is unwanted behavior then the returned cleanup function needs to be invoked in the callback:

const cleanup = finished(rs, (err) => {
  cleanup();
  // ...
});

Parameters

stream: ReadableStream | WritableStream | ReadWriteStream

A readable and/or writable stream.

options: FinishedOptions

A callback function that takes an optional error argument.

callback: (err?: ErrnoException | null) => void

Returns

() => void

A cleanup function which removes all registered listeners.

Parameters

stream: ReadableStream | WritableStream | ReadWriteStream
callback: (err?: ErrnoException | null) => void

Returns

() => void
import finished
import { finished } from "https://dotland.deno.dev/std@0.177.0/node/stream.ts";