IDBFactory: databases() 方法
注意:此功能在 Web Workers 中可用。
IDBFactory 接口的 databases 方法返回一个 Promise,该 Promise 会解析为一个对象数组,每个对象包含所有可用数据库的名称和版本。
这是数据库的一个快照,主要用于允许 Web 应用程序检查已创建的数据库——例如,为了清理应用程序代码早期版本创建的数据库。
语法
js
databases()
参数
无。
返回值
一个 Promise,它会解析为一个对象数组,代表可用数据库的快照(或者因以下错误/异常而拒绝)。
每个数组对象具有以下属性:
请注意,返回对象中的序列是未定义的。
异常
SecurityErrorDOMException-
如果该方法是从 不透明源 调用,或者用户禁用了存储,则会抛出此异常。
UnknownErrorDOMException-
如果由于任何原因无法确定可用数据库的集合,则会抛出此异常。
示例
创建和列出数据库
此示例创建/打开多个数据库。在每个数据库成功初始化后,它会列出所有可用的数据库。
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① |
浏览器兼容性
加载中…
另见
- 使用 IndexedDB
- 开始事务:
IDBDatabase - 使用事务:
IDBTransaction - 设置键的范围:
IDBKeyRange - 检索和修改数据:
IDBObjectStore - 使用游标:
IDBCursor - 参考示例:待办事项通知(查看实时示例)。