IDBFactory:databases() 方法

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

databasesIDBFactory 接口的一个方法,它返回一个 Promise,该 Promise 会返回一个包含所有可用数据库的名称和版本的对象的数组。

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

语法

js
databases()

参数

无。

返回值

一个 Promise,它会返回一个包含可用数据库快照的对象数组(或拒绝并返回以下错误/异常)。

每个数组对象都有以下属性

name

数据库名称。

version

数据库版本。

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

异常

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①

浏览器兼容性

BCD 表格仅在启用 JavaScript 的浏览器中加载。

另请参阅