更新时间: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>
(只读)fulfilled
,如果流发生错误或写端锁已释放,Promise 状态为 rejected
。ready
Promise<void>
(只读)fulfilled
,表示它不再施加背压。desiredSize
number
(只读)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,其中包含响应 undefined
。reason
将传递到底层接收器的中止算法。 如果此可写流是 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));