IndexedDB - 錯誤處理



並非我們編寫的請求都會返回輸出。這可能是由於 −

  • 編寫程式碼時出現的潛在錯誤。
  • 如果儲存限制被超出了。
  • 如果事務失敗等。

在失敗的請求中,事務會被取消,且所有更改都將被還原。但有時我們希望在不還原所有更改的情況下處理失敗,為此,我們使用 request.onerror 處理程式。它可以透過呼叫 event.preventDefault() 來防止事務中止。

示例

下面提供了一個示例,演示了在 IndexedDB 中進行錯誤處理 −

<!DOCTYPE html>
<html lang="en">
<head>
   <title>IndexedDB</title>
</head>
<body>
   <script>
      const request = indexedDB.open("DATABASE", 1);
      request.onsuccess = function (){
         document.write("database creation success")
      }
      request.onerror = function(event){
         document.write("Database not created " + event.target.errorCode);
      }
   </script>
</body>
</html>

輸出

Database not created undefined

我們可以對此使用 db.onerror 處理程式來捕捉錯誤。

db.onerror = function(event) { 
   let request = event.target; 
   document.write("Error is found", request.error); 
};

當 ID 相同的物件已經存在時,會出現約束錯誤。但有時,如果完全處理了某個錯誤,並且我們不想報告它,我們可以透過在 request.onerror 中使用 event.stopPropagation() 來停止冒泡。

request.onerror = function(event) { 
   if (request.error.name == "ConstraintError") { 
      document.write("id already exists"); 
      event.preventDefault(); 
      event.stopPropagation(); 
   }
}
廣告