stream.addAbortSignal(signal, stream)
版本历史
| 版本 | 变更 |
|---|---|
| v19.7.0, v18.16.0 | 添加了对 |
| v15.4.0 | 新增于: v15.4.0 |
-
signal<AbortSignal> 代表可能取消的信号\
signal<AbortSignal> A signal representing possible cancellation -
stream<Stream> | <ReadableStream> | <WritableStream> 附加信号的流。\
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()) 和在网络流上调用 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;
}
}
})(); 或者将 AbortSignal 与 ReadableStream 一起使用:
\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();
});