更新时间: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();
closedPromise<void> (只读)fulfilled,如果流发生错误或写端锁已释放,Promise 状态为 rejected。readyPromise<void> (只读)fulfilled,表示它不再施加背压。desiredSizenumber (只读)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));