文档中心 Edge Application 开发者指南 WritableStreamDefaultWriter

WritableStreamDefaultWriter

更新时间:2024-08-14 19:50:30

WritableStreamDefaultWriter 接口用于可写流的操作。它基于 Web APIs 标准 WritableStreamDefaultWriter 进行设计。

注意: 不支持直接构造 WritableStreamDefaultWriter 对象,使用 WritableStream.getWriter 方法获取。

描述

当您想直接写入 WritableStream 而不是从 ReadableStream 向其管道传输数据时,可以使用 writer。

您可以从 WritableStream 获取 WritableStreamDefaultWriter 对象,如下所示:

const { writable } = new TransformStream();
const writer = writable.getWriter();

属性

closed

  • 类型: Promise<void> (只读)
  • 描述: 返回一个 Promise 对象,如果流已关闭,Promise 状态为 fulfilled,如果流发生错误或写端锁已释放,Promise 状态为 rejected

ready

  • 类型: Promise<void> (只读)
  • 描述: 返回一个 Promise 对象,当流的内部队列的所需大小从负变为正时,该 Promise 状态为 fulfilled,表示它不再施加背压。

desiredSize

  • 类型: number (只读)
  • 描述: 返回填充流的内部队列所需的大小,以整数表示。始终返回 1、0(如果流已关闭)或 null(如果流有错误)。

方法

write()

writer.write(chunk: any): Promise<void>;

参数:

  • chunk: 要写入 writer 的数据块。

返回值: 返回一个 Promise,如果操作成功,则该 Promise 将被解决。

描述: 将数据块写入 writer 并返回一个 Promise,如果操作成功,则该 Promise 将被解决。

底层流可能接受的类型比 any 少,当遇到意外类型时,它会抛出异常。

close()

writer.close(): Promise<void>;

描述: 尝试关闭 writer。剩余的写入将在 writer 关闭之前完成处理。如果 writer 成功关闭并处理剩余的写入,则此方法返回一个 fulfilled 状态的 Promise,其中包含 undefined,如果出现任何错误,则返回 rejected 状态的 Promise。

abort()

writer.abort(reason?: string): Promise<string>;

参数:

  • reason (可选): 一个描述取消原因的可读字符串。

描述: 中止流。此方法返回一个 Promise,其中包含响应 undefinedreason 将传递到底层接收器的中止算法。 如果此可写流是 TransformStream 的一侧,则其中止算法会导致转换的可读侧因 reason 而出错。

警告: 中止后,任何尚未写入的数据都将丢失。

releaseLock()

writer.releaseLock(): void;

描述: 释放 writer 在流上的锁。释放后,writer 不再处于活动状态。您可以在所有待处理的 write(chunk) 调用解析之前调用此方法。 这允许您将写入操作排队、释放锁并开始从另一个源管道传输到可写流,如下例所示:

let writer = writable.getWriter();
// 写入前导码。
writer.write(new TextEncoder().encode('foo bar'));
// 在仍在写入时,从其他地方传输正文的其余部分。
writer.releaseLock();
await someResponse.body.pipeTo(writable);

示例代码

function writeArrayToStream(array, writableStream) {
  const writer = writableStream.getWriter();
  array.forEach(chunk => writer.write(chunk).catch(() => {}));

  return writer.close();
}

writeArrayToStream([1, 2, 3, 4, 5], writableStream)
  .then(() => console.log('All done!'))
  .catch(e => console.error('Error with the stream: ' + e));

相关参考

本篇文档内容对您是否有帮助?
有帮助
我要反馈
提交成功!非常感谢您的反馈,我们会继续努力做到更好!