菜单
开源

cancel(reason)

ReadableStreamDefaultReader 接口的 cancel() 方法返回一个 Promise,该 Promise 在流被取消时解析。

当你完全处理完流并且不再需要从中获取任何数据时(即使有排队等待读取的块),可以使用 cancel。调用 cancel 后,这些数据会丢失,并且流将不再可读。要在不丢弃排队块的情况下关闭流,请使用 ReadableStreamDefaultController.close()

参数

名称类型描述
reasonany一个可选的、人类可读的值,表示取消流的原因。

返回值

一个 Promise,当流被取消时,它会使用提供的 reason 解析。

异常

异常描述
TypeError当源对象不是 ReadableStreamDefaultReader 或流没有所有者时抛出。

示例

JavaScript
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);
    },
  });
}