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①

瀏覽器相容性

另見