Stream.drainableProtocol


  • 值:Symbol.for('Stream.drainableProtocol')

实现以使写入器与 ondrain() 兼容。如果没有背压,该方法应返回 null;如果存在背压,则返回一个在背压消除时兑现为真值的 Promise。

🌐 Implement to make a writer compatible with ondrain(). The method should return null if no backpressure, or a promise that fulfills with a truthy value when backpressure clears.

import { ondrain } from 'node:stream/iter';
class CustomWriter {
 #queue = [];
 #drain = null;
 #closed = false;
 [Symbol.for('Stream.drainableProtocol')]() {
 if (this.#closed) return null;
 if (this.#queue.length < 3) return Promise.resolve(true);
 this.#drain ??= Promise.withResolvers();
 return this.#drain.promise;
 }
 write(chunk) {
 this.#queue.push(chunk);
 }
 flush() {
 this.#queue.length = 0;
 this.#drain?.resolve(true);
 this.#drain = null;
 }
 close() {
 this.#closed = true;
 }
}
const writer = new CustomWriter();
const ready = ondrain(writer);
console.log(ready); // Promise { true } -- no backpressureconst { ondrain } = require('node:stream/iter');
class CustomWriter {
 #queue = [];
 #drain = null;
 #closed = false;
 [Symbol.for('Stream.drainableProtocol')]() {
 if (this.#closed) return null;
 if (this.#queue.length < 3) return Promise.resolve(true);
 this.#drain ??= Promise.withResolvers();
 return this.#drain.promise;
 }
 write(chunk) {
 this.#queue.push(chunk);
 }
 flush() {
 this.#queue.length = 0;
 this.#drain?.resolve(true);
 this.#drain = null;
 }
 close() {
 this.#closed = true;
 }
}
const writer = new CustomWriter();
const ready = ondrain(writer);
console.log(ready); // Promise { true } -- no backpressure

AltStyle によって変換されたページ (->オリジナル) /