cancel(reason)
ReadableStream 接口的 cancel()
方法返回一个 Promise
,该 Promise 在流被取消时解析。
当你完全处理完流并且不再需要其中的任何数据时,即使有块正在排队等待读取,也可以使用 cancel
。调用 cancel
后,这些数据将丢失,并且流不再可读。要关闭流而不丢弃排队中的块,请使用 ReadableStreamDefaultController.close()。
参数
名称 | 类型 | 描述 |
---|---|---|
reason | any | 一个可选的、人类可读的值,表示取消流的原因。 |
返回值
一个 Promise,在流被取消时以值 undefined
解析。
异常
异常 | 描述 |
---|---|
TypeError | 当流被读取器锁定时抛出。 |
示例
import { ReadableStream } from 'k6/experimental/streams';
import { setTimeout } from 'k6/timers';
export default async function () {
// Define a number stream that emits numbers from 1 to 10 every second
const stream = numbersStream();
const reader = stream.getReader();
while (true) {
const { done, value } = await reader.read();
if (done) break;
if (value === 8) {
// Cancel the stream when the number is 8, any enqueued chunks are lost
await reader.cancel('cancelling the stream');
break;
}
}
}
function numbersStream() {
let currentNumber = 0;
return new ReadableStream({
start(controller) {
const fn = () => {
if (currentNumber < 10) {
controller.enqueue(++currentNumber);
setTimeout(fn, 1000);
return;
}
controller.close();
};
setTimeout(fn, 1000);
},
});
}