【问题标题】:IndexedDB Error : NotFoundError : Failed to execute 'transaction' on 'IDBDatabase': One of the specified object stores was not foundIndexedDB 错误:NotFoundError:无法在“IDBDatabase”上执行“事务”:未找到指定的对象存储之一
【发布时间】:2021-01-16 22:32:54
【问题描述】:

我在我的 ReactJs PWA 中创建了一个 IndexedDB 设置。

抛出以下错误:

NotFoundError: Failed to execute 'transaction' on 'IDBDatabase': One of the specified object stores was not found.

在线userSearchDBtx = userSearchDB.transaction("userdata","readwrite")

我的函数如下所示:

function Users() {
  let userSearchDB,userSearchDBstore,userSearchDBtx;
  let userDbrequest = window.indexedDB.open("MyTestDatabase", 1);

useEffect(()=>{
  if (!window.indexedDB) {
      console.log("Your browser doesn't support a stable version of IndexedDB. Such and such feature will not be available.");
  }

  else console.log("IndexedDB supported")

  userDbrequest.onupgradeneeded = function(event) { 
    userSearchDB = event.target.result;
    userSearchDBtx = event.target.transaction;
    userSearchDBstore = userSearchDB.createObjectStore("userdata",{keyPath:"uid"})
  };

  userDbrequest.onerror = function(event) {
    console.log("ERROR: " + event.target.errorCode)
  };

  userDbrequest.onsuccess = function(event) {
    console.log("IndexdDb Working")
    userSearchDB = event.target.result
    userSearchDBtx = userSearchDB.transaction("userdata","readwrite");
    userSearchDBstore = userSearchDBtx.objectStore("userdata");
  };
  //Here also put is unknown
  userSearchDBstore.put({uid:3854238974,phone:3257777,name:"shan",email:"1@1.com"})

},[])

}

【问题讨论】:

    标签: javascript reactjs indexeddb


    【解决方案1】:
    let userDbrequest = window.indexedDB.open("MyTestDatabase", 1);
    

    将此行放在useEffect()中

    代码应该是

    let userSearchDB,userSearchDBstore,userSearchDBtx,userDbrequest;
    
    useEffect(()=>{
       userDbrequest = window.indexedDB.open("MyTestDatabase", 2);
       ...Conrinue your code
    },[])
    

    另外,在这样做的同时增加版本

    【讨论】:

      【解决方案2】:

      您在连接数据库之前调用userSearchDBstore.put(...),这意味着没有保证升级需要回调完成,这意味着没有创建保证存储。

      您需要等待。将 put 调用移至 open db 请求成功回调中,使其仅在数据库升级后运行。

      【讨论】:

        【解决方案3】:

        我发现原因是错误的 storeNames 位于:const request = db .transaction(storeNames , "readwrite")

        【讨论】:

          猜你喜欢
          • 2017-07-11
          • 1970-01-01
          • 2016-08-25
          • 2021-02-17
          • 2016-02-16
          • 1970-01-01
          • 1970-01-01
          • 2015-02-19
          • 2020-12-04
          相关资源
          最近更新 更多