当您想直接写入 WritableStream,而不是从 ReadableStream 管道传输数据时,需要使用 writer。例如:
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));-
writer.desiredSizeint- 填充 stream 内部队列所需的大小,为整数。始终返回 1、0(如果 stream 已关闭)或
null(如果 stream 有错误)。
- 填充 stream 内部队列所需的大小,为整数。始终返回 1、0(如果 stream 已关闭)或
-
writer.closedPromise<void>- 表示 writer 是否已关闭的 promise。当 writer stream 关闭时 promise fulfilled,stream 出错时 rejected。
-
abort(reasonstringoptional): Promise<void>- 中止 stream。此方法返回一个 fulfilled 且响应为
undefined的 promise。reason是可选的人类可读字符串,表示取消原因。reason将传递给底层 sink 的 abort 算法。如果此可写流是 TransformStream 的一侧,则其 abort 算法会导致 transform 的可读侧因reason而进入 errored 状态。
- 中止 stream。此方法返回一个 fulfilled 且响应为
-
close(): Promise<void>- 尝试关闭 writer。在 writer 关闭之前,剩余的 write 操作会完成处理。如果 writer 成功关闭并处理剩余的 write,此方法返回 fulfilled 且值为
undefined的 promise,或在任何错误时 rejected。
- 尝试关闭 writer。在 writer 关闭之前,剩余的 write 操作会完成处理。如果 writer 成功关闭并处理剩余的 write,此方法返回 fulfilled 且值为
-
releaseLock(): void- 释放 writer 对 stream 的锁定。释放后,writer 不再处于活动状态。您可以在所有待处理的
write(chunk)调用 resolve 之前调用此方法。这样您可以排队一个write操作、释放锁定,然后从另一个来源开始向可写流管道传输,如下例所示。
- 释放 writer 对 stream 的锁定。释放后,writer 不再处于活动状态。您可以在所有待处理的
let writer = writable.getWriter();
// Write a preamble.
writer.write(new TextEncoder().encode('foo bar'));
// While that’s still writing, pipe the rest of the body from somewhere else.
writer.releaseLock();
await someResponse.body.pipeTo(writable);-
write(chunkany): Promise<void>- 将数据 chunk 写入 writer,并返回在操作成功时 resolve 的 promise。
- 底层 stream 接受的类型可能少于
any,遇到意外类型时会抛出异常。