stream.finished()

Resolves when a stream is no longer readable, writable, or has errored.

Since Node 10; promises form Node 15 Spec ↗

Syntax

await finished(stream[, options])

Parameters

NameTypeRequiredDescription
stream Readable | Writable Yes The stream to observe to completion.
options object No `{ error, readable, writable }` flags to tune which conditions end the wait.

Returns

Promise<void> — Resolves on completion; rejects if the stream errors.

Examples

import { createReadStream } from 'node:fs';
import { finished } from 'node:stream/promises';

const rs = createReadStream('big.csv');
rs.resume(); // drain it
await finished(rs);
console.log('fully read');
Output
fully read
import { finished } from 'node:stream/promises';

try {
  await finished(someStream);
} catch (err) {
  console.error('stream error:', err.code);
}
Output
stream error: ECONNRESET

Notes

Use it to know when a stream you do not control (e.g. piped elsewhere) is done. It does not consume data, so the stream must still be drained. Prefer `pipeline` when you also need to move data.

See also