import { addAbortSignal } from "https://deno.land/std@0.161.0/node/_stream.d.ts";
Attaches an AbortSignal to a readable or writeable stream. This lets code
control stream destruction using an AbortController
.
Calling abort
on the AbortController
corresponding to the passedAbortSignal
will behave the same way as calling .destroy(new AbortError())
on the stream.
const fs = require('fs');
const controller = new AbortController();
const read = addAbortSignal(
controller.signal,
fs.createReadStream(('object.json'))
);
// Later, abort the operation closing the stream
controller.abort();
Or using an AbortSignal
with a readable stream as an async iterable:
const controller = new AbortController();
setTimeout(() => controller.abort(), 10_000); // set a timeout
const stream = addAbortSignal(
controller.signal,
fs.createReadStream(('object.json'))
);
(async () => {
try {
for await (const chunk of stream) {
await process(chunk);
}
} catch (e) {
if (e.name === 'AbortError') {
// The operation was cancelled
} else {
throw e;
}
}
})();
Parameters
signal: AbortSignal
A signal representing possible cancellation
stream: T
a stream to attach a signal to