首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

为什么连接到indexedDB时从未调用过onupgradeneeded回调?

IndexedDB是一种浏览器内置的客户端数据库,用于在浏览器中存储大量结构化数据。当我们连接到IndexedDB时,可能会遇到从未调用过onupgradeneeded回调的情况。下面是可能导致此问题的几个原因:

  1. 数据库已存在:如果连接的数据库已经存在,并且其版本与请求的版本匹配,那么浏览器将直接返回连接,而不会触发onupgradeneeded回调。这意味着数据库已经准备好使用,不需要进行升级或初始化操作。
  2. 数据库版本未变化:如果连接的数据库版本与请求的版本相同,也不会触发onupgradeneeded回调。这意味着数据库已经是最新版本,不需要进行任何升级操作。
  3. 数据库被其他连接占用:如果其他连接正在使用该数据库,并且该连接处于活动状态,那么新的连接请求可能会被阻塞,直到其他连接关闭或释放对数据库的占用。在这种情况下,onupgradeneeded回调将在连接获得数据库控制权后触发。
  4. 数据库被删除:如果之前的连接删除了数据库,那么新的连接请求将创建一个新的空数据库,并且不会触发onupgradeneeded回调。这是因为数据库已被删除,不存在需要升级的情况。

总结起来,当连接到IndexedDB时,从未调用过onupgradeneeded回调可能是因为数据库已存在且版本匹配、数据库版本未变化、数据库被其他连接占用或数据库被删除。在这些情况下,不需要进行升级或初始化操作,因此不会触发onupgradeneeded回调。

腾讯云相关产品和产品介绍链接地址:

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

造一个 idb-keyval 轮子

(storeName) } // 失败 openDBRequest.onerror = () => console.log('出错啦') // 成功 openDBRequest.onsuccess...promisify 看到,很容易就想到了利用 Promise 来进行封装,封装之后就可以用 await-async 来写代码了,避免地狱。...,解决地狱的问题 const db = await promisifyRequest(request); // 第一个参数为事务的模式,第二个参数为开发者的 return async...这里还有个小坑,当读完所有的 cursor 时候会调用 oncomplete ,其实 indexedDB 里的 transaction 还有 onabort 和 oncomplete 两个,所以当...将 request promisify 可以避免地狱的问题,上面 4 个每对都完美对应 Promise resolve 和 reject,所以 promisify 过程基本是无痛的 indexedDB

32410

【javascript】谈谈HTML5: Web-Worker、canvas、indexedDB、拖拽事件

数据库后,一般在onupgradeneeded中初始化(或修改)数据库结构(划重点!!)...为什么我们必须在.onupgradeneeded中初始化数据库的结构,而不是在onsuccess中?...对onupgradeneeded,在open提供第二个版本参数的前提下: 2.1 第一次调用open方法创建一个新的数据库的时候,onupgradeneeded一定会被调用 2.2 第二次或以后...要在onupgradeneeded中运行 (很显然每次打开都会被调用的onsuccess并不适合用于初始化数据库结构) indexedDB的具体操作 首先说一下,在下面的展示例子中,我们的HTML是这样的...IndexedDB是一个事务型数据库系统 3. indexedDB大多数API都是异步的,这意味着调用一个方法你不能马上得到关键的那个对象,而在对应的success中才能取得 拖放事件 一个典型的拖放操作是这样开始的

3.1K30

【javascript】谈谈HTML5—Web Worker+canvas+indexedDB+拖拽事件

数据库后,一般在onupgradeneeded中初始化(或修改)数据库结构(划重点!!)...为什么我们必须在.onupgradeneeded中初始化数据库的结构,而不是在onsuccess中?...对onupgradeneeded,在open提供第二个版本参数的前提下: 2.1 第一次调用open方法创建一个新的数据库的时候,onupgradeneeded一定会被调用 2.2 第二次或以后...要在onupgradeneeded中运行 (很显然每次打开都会被调用的onsuccess并不适合用于初始化数据库结构) indexedDB的具体操作 首先说一下,在下面的展示例子中,我们的HTML是这样的...IndexedDB是一个事务型数据库系统 3. indexedDB大多数API都是异步的,这意味着调用一个方法你不能马上得到关键的那个对象,而在对应的success中才能取得 拖放事件 一个典型的拖放操作是这样开始的

3.7K100

JavaScript IndexedDB 完整指南

IndexedDB 用于在浏览器中存储数据,对于需要离线工作的 web 应用程序(如大多数进步的 web 应用程序)尤其重要。 首先,让我们介绍一下为什么需要将数据存储在 web 浏览器中。...open 方法将返回一个具有多个属性的对象,包括 onerror、onupgradenneeded 和 onsuccess,每个属性都接受一个函数,在相关事件发生执行。...IndexedDB 是基于事件的,这符合它的异步模型。接下来,让我们看看数据库启动可能发生的事件。首先,我们将监听 request.onerror 事件,以防访问数据库出现任何错误。...解决方案是增加表的版本号,这将创建一个 onupgradenneeded,并且 onupgradenneeded 将在下次页面刷新执行。...在互联网连接中,你可能希望将 indexedDB 与外部数据库同步,以便在用户清除浏览器数据不会丢失用户的信息。

1.9K20

IndexedDB使用与出坑指南

具体示例如下: const request = window.indexedDB.open('test'); request.onupgradeneeded = function (event) {...而在数据库创建或者版本更新,会触发onupgradeneeded事件。 更新数据库版本号 window.indexedDB.open的第二个参数即为版本号。在不指定的情况下,默认版本号为1。...此时我们指定一个高于之前版本的版本号,就会触发onupgradeneeded事件。类似的,当此数据库不存在,也会触发此事件并且将版本更新到置顶版本。...; }; 注:只能在onupgradeneeded函数中创建存储空间,而不能在数据库打开后的success函数中创建。 通过createObjectStore能够创建一个存储空间。...但是,IndexedDB在使用过程中仍然需要避免可能会出现的一些问题,或者对可能导致的不利影响有一定的容错处理。这样才不会对应用产生重大影响。

7.8K53

前端下载超大文件的完整方案

以下是一个基本的前端大文件下载的实现示例: 可以在类里面增加注入一个函数,用来更新外部的一些状态,示例中只展示下载完成后的 class FileDownloader { constructor...这样可以确保在下载大文件不会因为内存占用过多而导致性能问题。 在上面提供的示例代码中,文件块是暂时保存在一个数组中的,最终在mergeChunks()方法中将这些文件块合并成完整的文件。...('删除 IndexedDB 数据出错:', error); }); IndexedDB内存暂用过高问题 使用 IndexedDB 可能会导致浏览器内存占用增加的原因有很多,以下是一些可能的原因:...确保在不再需要使用 IndexedDB 正确关闭数据库连接,以释放占用的内存。...浏览器实现:不同浏览器的 IndexedDB 实现可能存在差异,某些浏览器可能会在处理 IndexedDB 数据占用更多内存。

57310

JavaScript IndexedDB 完整指南

IndexedDB 用于在浏览器中存储数据,对于需要离线工作的 web 应用程序(如大多数进步的 web 应用程序)尤其重要。 首先,让我们介绍一下为什么需要将数据存储在 web 浏览器中。...open 方法将返回一个具有多个属性的对象,包括 onerror、onupgradenneeded 和 onsuccess,每个属性都接受一个函数,在相关事件发生执行。...IndexedDB 是基于事件的,这符合它的异步模型。接下来,让我们看看数据库启动可能发生的事件。首先,我们将监听request.onerror事件,以防访问数据库出现任何错误。...解决方案是增加表的版本号,这将创建一个 onupgradenneeded,并且 onupgradenneeded 将在下次页面刷新执行。...在互联网连接中,你可能希望将 indexedDB 与外部数据库同步,以便在用户清除浏览器数据不会丢失用户的信息。 4. 小结 IndexedDB 在浏览器中为你提供了一个功能强大的异步文档数据库。

1.6K10

ES6(四)用Promise封装一下IndexedDB 配置文件内部成员建立对象库以及打开数据库初始化对象添加对象修改对象删除对象清空仓库里的对象删除对象仓库删除数据库按主键获取对象,

} // 打开数据库的 promise const dbPromise = new Promise((resolve, reject) => { // 数据库打开成功的...indexedDB 的逻辑是这样的,在open数据库的时候判断本地有没有数据库,如果没有数据库则触发 onupgradeneeded 事件,创建数据库,然后打开数据库。...storeName) // 获取store .get(_object.id) // 获取对象 .onsuccess = (event) => { // 成功后的...(storeName) // 获取store .delete() // 清空对象仓库里的对象 .onsuccess = (event) => { // 成功后的...{ dbRequest = store.get(id) } dbRequest.onsuccess = (event) => { // 成功后的

2.1K20

IndexedDB 教程

IndexedDB 教程 IndexedDB 是一个基于 JavaScript 的面向对象的事务型数据库。有了 LocalStorage 和 Cookies,为什么还要推出 indexedDB 呢?...对于简单的数据,你应该继续使用 localstorage,但当你希望存储大量数据IndexedDB 会明显的更适合,IndexedDB 能提供你更为复杂的查询数据的方式。...当请求一个事务,必须决定是按照只读还是读写模式请求访问。 基于请求 对 indexedDB 数据库的每次操作,描述为通过一个请求打开数据库,访问一个 object store,再继续。...indexedDB 对象了,就像使用 ajax 一样,语句执行完并不代表已经获取到了对象,所以我们一般在其函数中处理。...对打开数据库的事件进行处理 // 打开数据库成功后,自动调用onsuccess事件

1.5K20

indexedDB 基本使用

; }; request.onerror=function(event){ console.error('创建数据库出错'); }; request.onupgradeneeded=function(event...,每个存储空间有自己的主键、索引等; 创建对象存储空间的操作一般放在创建数据库成功里: request.onupgradeneeded=function(event){// 更新对象存储空间和索引...alt);// 创建一个查找数据的请求 request.onsuccess=function(event){ }; varnoDataTest=index.get('testalt');// 没有该对象的测试...需要在成功里拿到result对象,判断是否取完了数据:若数据已取完,result是undefined; 若未取完,则result是个IDBCursorWithValue对象,需调用continue(...在索引上使用游标 接着本文上述使用索引的例子,在索引title上使用openCursor()方法,若不传参数,则会遍历所有数据,在成功中的到的result对象有以下属性: key 数据库中这条对象的

1.6K100

浏览器里的本地数据库:IndexedDB

IndexedDB 是什么 在现代浏览器的本地存储方案中,indexedDB 是一项重要的能力组成, 它是可以在浏览器端使用的本地数据库,可以存储大量数据,提供接口来查询,还可以建立索引,这些都是其他存储方案...IndexedDB 中有版本概念,这就规定了同一刻下只有一个版本的数据库存在。 对象仓库:对象仓库 ObjectStore 在 IndexedDB 中对应的是 MYSQL 中的表 Table。...快速起步 IndexedDB 在介绍了 IndexedDB 的主要概念之后,可以通过一个简单实用的 CURD 例子来学习在日常开发中我们是怎么使用 IndexedDB 的,各个 API 细节日后可以慢慢深入学习...) { // 获取数据库实例 db = DBRequestLink.result; // 其他操作 }; // 这个监听触发于数据库首次新建、open数据库传递新版本(只能比之前传递的版本高...) DBRequestLink.onupgradeneeded = function(event) {}; 创建数据库的主键和字段 DBOpenRequest.onupgradeneeded = function

1.3K10

穿越标签页的通信魔法:揭秘跨标签页通信的神奇力量| 技术创作特训营第一期

由事件监听器发送给函数的事件对象有几个自动填充的属性如下: key:告诉我们被修改的条目的键。 newValue:告诉我们被修改后的新值。 oldValue:告诉我们修改前的值。...(dbName, version); // 数据库打开成功 request.onsuccess = function (event) { db...存储数据库对象 console.log("数据库打开成功"); resolve(db); }; // 数据库打开失败的...request.onerror = function (event) { console.log("数据库打开报错"); }; // 数据库有更新时候的...每一个连接到该服务器的客户端,都会触发服务器的 connection 事件,并且会将此客户端连接实例作为函数的参数传入。 我们将所有的客户端连接实例保存到一个数组里面。

39543

HTML5 Web 客户端五种离线存储方式汇总

最近折腾HTML5游戏需要离线存储功能,便把目前可用的几种HTML5存储方式研究了下,基于HT for Web写了个综合的实例,分别利用了Cookie、WebStorage、IndexedDB以及FileSystem...可以存储结构对象,可构建key和index的索引方式查找,目前各浏览器的已经逐渐支持IndexedDB的存储方式,其使用代码如下,需注意IndexedDB的很多操作接口类似NodeJS的异步方式,特别是查询...cursor的continue都是异步再次回onsuccess函数的操作方式,因此和NodeJS一样使用上不如同步的代码容易。...request = indexedDB.open("DataModel"); request.onupgradeneeded = function() { db = request.result...cleared'); } }; } 最后是FileSystem API相当于操作本地文件的存储方式,目前支持浏览器不多,其接口标准也在发展制定变化中,例如在我写这个代码大部分文献使用的

1.1K30

HTML5的五种客户端离线存储方案

最近折腾HTML5游戏需要离线存储功能,便把目前可用的几种HTML5存储方式研究了下,基于HT for Web写了个综合的实例,分别利用了Cookie、WebStorage、IndexedDB以及FileSystem...可以存储结构对象,可构建key和index的索引方式查找,目前各浏览器的已经逐渐支持IndexedDB的存储方式,其使用代码如下,需注意IndexedDB的很多操作接口类似NodeJS的异步方式,特别是查询...cursor的continue都是异步再次回onsuccess函数的操作方式,因此和NodeJS一样使用上不如同步的代码容易。...request = indexedDB.open("DataModel"); request.onupgradeneeded = function() { db = request.result...cleared'); } }; } 最后是FileSystem API相当于操作本地文件的存储方式,目前支持浏览器不多,其接口标准也在发展制定变化中,例如在我写这个代码大部分文献使用的

2.4K20
领券