菜单
开源

read()

`ReadableStreamDefaultReader` 接口的 `read()` 方法返回一个 promise,用于访问流内部队列中的下一个数据块。

返回值

一个 promise,根据流的状态解析或拒绝并返回一个值

  • 如果一个数据块可用,promise 会解析为一个形如 { done: false, value: chunkValue } 的对象。
  • 如果流已关闭且没有更多数据可用,promise 会解析为一个形如 { done: true, value: undefined } 的对象。
  • 如果流出错,promise 会以导致流出错的错误进行拒绝。

异常

异常描述
TypeError源对象不是 ReadableStreamDefaultReader 时抛出,或者流没有所有者,或者调用了 ReadableStreamDefaultReader.releaseLock() 时抛出。

示例

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;

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