stream.addAbortSignal(signal, stream)
signal<AbortSignal> 表示可能取消的信号stream<Stream> | <ReadableStream> | <WritableStream>
附加信号的流。
🌐 A stream to attach a signal to.
将 AbortSignal 附加到可读或可写流。这允许代码使用 AbortController 控制流的销毁。
🌐 Attaches an AbortSignal to a readable or writeable stream. This lets code
control stream destruction using an AbortController.
对与传入的 AbortSignal 对应的 AbortController 调用 abort,其行为与在流上调用 .destroy(new AbortError()) 相同,对于 Web 流则是 controller.error(new AbortError())。
🌐 Calling abort on the AbortController corresponding to the passed
AbortSignal will behave the same way as calling .destroy(new AbortError())
on the stream, and controller.error(new AbortError()) for webstreams.
const fs = require('node:fs');
const controller = new AbortController();
const read = addAbortSignal(
controller.signal,
fs.createReadStream(('object.json')),
);
// Later, abort the operation closing the stream
controller.abort(); 或者将 AbortSignal 与可读流作为异步可迭代对象一起使用:
🌐 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;
}
}
})(); 或者在可读流(ReadableStream)中使用 AbortSignal:
🌐 Or using an AbortSignal with a ReadableStream:
const controller = new AbortController();
const rs = new ReadableStream({
start(controller) {
controller.enqueue('hello');
controller.enqueue('world');
controller.close();
},
});
addAbortSignal(controller.signal, rs);
finished(rs, (err) => {
if (err) {
if (err.name === 'AbortError') {
// The operation was cancelled
}
}
});
const reader = rs.getReader();
reader.read().then(({ value, done }) => {
console.log(value); // hello
console.log(done); // false
controller.abort();
});