cancel(reason)
ReadableStreamDefaultReader 接口的 cancel()
方法返回一个 Promise
,该 Promise 在流被取消时解析。
当你完全处理完流并且不再需要从中获取任何数据时(即使有排队等待读取的块),可以使用 cancel
。调用 cancel
后,这些数据会丢失,并且流将不再可读。要在不丢弃排队块的情况下关闭流,请使用 ReadableStreamDefaultController.close()。
参数
名称 | 类型 | 描述 |
---|---|---|
reason | any | 一个可选的、人类可读的值,表示取消流的原因。 |
返回值
一个 Promise,当流被取消时,它会使用提供的 reason
解析。
异常
异常 | 描述 |
---|---|
TypeError | 当源对象不是 ReadableStreamDefaultReader 或流没有所有者时抛出。 |
示例
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();
// We use the getReader method to create a reader and lock the stream to it
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
await reader.cancel('cancelling the stream');
break;
}
console.log(`received number ${value} from stream`);
}
}
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);
},
});
}