Signatur
Beschreibung
Die Eigenschaft name eines Lock-Objekts gibt die Zeichenkette zurück, die beim Anfordern des Locks als erstes Argument an LockManager.request() übergeben wurde. Dieser Name steht für die Ressource, die der Lock schützt, etwa "sync-db" oder "token-refresh". Alle Tabs, Worker und Frames desselben Ursprungs (Origin), die denselben Namen anfordern, stimmen sich über diesen Lock ab.
Der Name hat keine vorgegebene Bedeutung, der Browser vergleicht ihn nur als Zeichenkette. Hilfreich ist name vor allem beim Protokollieren und bei Hilfsfunktionen, die mehrere Locks über denselben Callback verwalten. Dort erkennt man daran, welcher Lock gerade vergeben ist.
Den Lock bekommt man nur als Argument des Callbacks von request(). Wenn die Option ifAvailable: true gesetzt ist und der Lock nicht frei ist, bekommt der Callback null statt eines Lock-Objekts. Dann lässt sich name nicht auslesen.
Rückgabewert
LockManager.request() übergeben wurde.Beispiele
Namen des angeforderten Locks ausgeben
await navigator.locks.request('sync-db', async (lock) => {
console.log(`Lock erhalten: ${lock.name}`);
// exklusiver Zugriff auf die Ressource
await new Promise((r) => setTimeout(r, 500));
});
Hilfsfunktion mit Protokollierung
const withLock = (name, task) =>
navigator.locks.request(name, async (lock) => {
const start = performance.now();
try {
return await task();
} finally {
console.log(`[${lock.name}] gehalten für ${Math.round(performance.now() - start)} ms`);
}
});
const token = await withLock('token-refresh', async () => {
const res = await fetch('/api/token', { method: 'POST' });
return res.json();
});
Null-Prüfung bei ifAvailable
await navigator.locks.request('report-export', { ifAvailable: true }, async (lock) => {
if (!lock) {
console.log('Export läuft bereits in einem anderen Tab.');
return;
}
console.log(`Starte Export unter Lock "${lock.name}" (${lock.mode})`);
});
// Wichtig · Fallstricke
- Nur lesbar: Wenn man
lock.nameeinen neuen Wert zuweist, wird die Zuweisung ignoriert, im Strict Mode gibt es einenTypeError. Der Name lässt sich nachträglich nicht ändern. - Reservierte Namen: Namen, die mit
"-"beginnen, sind reserviert. Bei so einem Namen lehntrequest()die Anfrage mit einemNotSupportedErrorab. nullmöglich: MitifAvailable: truekann der Callbacknullbekommen. Vor dem Zugriff auflock.namealso immer prüfen, ob ein Lock da ist.- Geltungsbereich: Namen gelten nur innerhalb eines Ursprungs (Origin). Andere Websites können denselben Namen nicht blockieren und auch nicht sehen.
- Kompatibilität: Funktioniert nur in sicheren Kontexten (HTTPS) und in Window- und Worker-Umgebungen. In Node.js gibt es keine Unterstützung.