Signatur
Beschreibung
Die Eigenschaft locked zeigt an, ob ein WritableStream gerade gesperrt ist. Gesperrt ist ein Stream, sobald über getWriter() ein WritableStreamDefaultWriter angefordert wurde. Solange die Sperre besteht, kann nur dieser eine Writer in den Stream schreiben. Ein zweiter Writer lässt sich nicht erzeugen.
Auch ReadableStream.prototype.pipeTo() und pipeThrough() sperren den Ziel-Stream für die gesamte Dauer des Pipings. Deshalb ist locked praktisch, um vor einem getWriter()- oder pipeTo()-Aufruf zu prüfen, ob der Stream frei ist. So vermeiden Sie einen TypeError.
Die Sperre wird mit writer.releaseLock() aufgehoben. Danach liefert locked wieder false. Auch ein Aufruf von abort() oder close() direkt auf dem Stream setzt voraus, dass der Stream nicht gesperrt ist.
Rückgabewert
true, wenn der Stream an einen Writer gebunden ist oder gerade als Piping-Ziel genutzt wird, sonst false.Beispiele
Sperrstatus vor und nach getWriter()
const stream = new WritableStream({
write(chunk) {
console.log('Empfangen:', chunk);
}
});
console.log(stream.locked); // noch frei
const writer = stream.getWriter();
console.log(stream.locked); // jetzt gesperrt
await writer.write('Hallo');
writer.releaseLock();
console.log(stream.locked); // wieder frei
Sicher einen Writer anfordern
const getWriterSafe = (stream) => {
if (stream.locked) {
console.warn('Stream ist bereits gesperrt – kein neuer Writer möglich.');
return null;
}
return stream.getWriter();
};
const sink = new WritableStream({ write: (c) => console.log(c) });
const w1 = getWriterSafe(sink);
const w2 = getWriterSafe(sink); // gibt null zurück
console.log(w1 !== null, w2);
Sperre während pipeTo()
const readable = new ReadableStream({
start(controller) {
controller.enqueue('a');
controller.enqueue('b');
controller.close();
}
});
const writable = new WritableStream({ write: (c) => console.log('Chunk:', c) });
const piping = readable.pipeTo(writable);
console.log('Während Piping:', writable.locked);
await piping;
console.log('Nach Piping:', writable.locked);
// Wichtig · Fallstricke
lockedist nur lesbar. Eine Zuweisung wird ignoriert, im Strict Mode löst sie einenTypeErroraus.getWriter()auf einem gesperrten Stream wirft einenTypeError. Dasselbe gilt fürstream.abort()undstream.close(): Beide liefern dann ein abgelehntes Promise. Nutzen Sie in diesem Fallwriter.abort()bzw.writer.close().- Ist ein Stream geschlossen oder fehlerhaft, gibt ihn das nicht automatisch frei. Solange der Writer nicht mit
releaseLock()freigegeben wurde, bleibtlockedtrue. lockedsagt nichts über den Zustand des Streams aus (offen, geschlossen, fehlerhaft). Dafür gibt eswriter.closedundwriter.desiredSize.- Kompatibilität: in allen modernen Browsern verfügbar (Firefox seit Version 100). In Node.js ist die Eigenschaft ab Version 18 global verfügbar, davor über
stream/web.