LockManager:query() 方法

Baseline 已广泛支持

此特性已经十分成熟,可在许多设备和浏览器版本上使用。自 2022 年 3 月起,它已在各浏览器中可用。

安全上下文: 此功能仅在安全上下文(HTTPS)中可用,且支持此功能的浏览器数量有限。

注意:此功能在 Web Workers 中可用。

LockManager 接口的 query() 方法返回一个 Promise,该 Promise 解析为一个包含有关已持有和待定锁信息的对象。

语法

js
query()

参数

无。

返回值

一个 Promise,解析为一个包含 LockManager 状态快照的对象。该对象具有以下属性:

held

已持有锁的 LockInfo 对象数组。

pending

待定锁请求的 LockInfo 对象数组。

LockInfo 对象可以具有以下属性:

name

请求锁时传递给 LockManager.request() 的名称。

模式

请求锁时传递给 LockManager.request() 的访问模式。模式为 "exclusive"(独占)或 "shared"(共享)。

clientId

调用 LockManager.request() 的上下文的唯一标识符。这与 Client.id 的值相同。

异常

此方法可能会返回一个被拒绝的 Promise,并带有以下类型的 DOMException

InvalidStateError DOMException

如果环境的文档尚未完全激活,则抛出此异常。

SecurityError DOMException

如果无法获得当前环境的锁管理器,则抛出此异常。

示例

js
const state = await navigator.locks.query();
for (const lock of state.held) {
  console.log(`held lock: name ${lock.name}, mode ${lock.mode}`);
}
for (const request of state.pending) {
  console.log(`requested lock: name ${request.name}, mode ${request.mode}`);
}

规范

规范
Web Locks API
# api-lock-manager-query

浏览器兼容性