IDBFactory: databases() 方法

Baseline 2024
新推出

自 2024 年 5 月以来,此功能已在最新设备和浏览器版本中可用。此功能可能不适用于较旧的设备或浏览器。

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

IDBFactory 接口的 databases 方法返回一个 Promise,该 Promise 会解析为一个对象数组,每个对象包含所有可用数据库的名称和版本。

这是数据库的一个快照,主要用于允许 Web 应用程序检查已创建的数据库——例如,为了清理应用程序代码早期版本创建的数据库。

语法

js
databases()

参数

无。

返回值

一个 Promise,它会解析为一个对象数组,代表可用数据库的快照(或者因以下错误/异常而拒绝)。

每个数组对象具有以下属性:

name

数据库名称。

版本

数据库版本。

请注意,返回对象中的序列是未定义的。

异常

SecurityError DOMException

如果该方法是从 不透明源 调用,或者用户禁用了存储,则会抛出此异常。

UnknownError DOMException

如果由于任何原因无法确定可用数据库的集合,则会抛出此异常。

示例

创建和列出数据库

此示例创建/打开多个数据库。在每个数据库成功初始化后,它会列出所有可用的数据库。

JavaScript

首先,我们定义用于获取和记录可用数据库的函数。它会等待 indexedDB.databases() 返回的 Promise,然后迭代数组并记录每个元素的 [值]。

js
async function getDb() {
  const databases = await indexedDB.databases();
  log("List databases:");
  databases.forEach((element) => {
    log(`name: ${element.name}, version: ${element.version}`);
  });
}

为了演示上述函数如何使用,我们在下面创建两个数据库。对于每个数据库,我们在数据库打开之前进行记录。我们还在成功初始化(或错误)时进行记录,然后也记录可用的数据库。

js
// Create a database named toDoList with default version (1)
const dbName1 = "toDoList";
log(`Opening: ${dbName1}`);
let DBOpenRequest = window.indexedDB.open(dbName1);

DBOpenRequest.addEventListener("error", (event) => {
  log(`Error opening: ${dbName1}`);
  getDb();
});

DBOpenRequest.addEventListener("success", (event) => {
  log(`Initialized: ${dbName1}`);
  getDb();
});

// Create database "AnotherDb"
const dbName2 = "AnotherDb";
log(`Opening ${dbName2}`);
DBOpenRequest = window.indexedDB.open(dbName2, 2);

DBOpenRequest.addEventListener("error", (event) => {
  log(`Error opening: ${dbName2}`);
  getDb();
});

DBOpenRequest.addEventListener("success", (event) => {
  log(`Initialized: ${dbName2}`);
  getDb();
});

结果

结果如下所示。请注意,获取数据库所需的时间及其顺序是未定义的。

规范

规范
Indexed Database API 3.0
# ref-for-dom-idbfactory-databases①

浏览器兼容性

另见