如何在 IndexedDB 的一个事务中放置多个请求

2024-02-25

我的代码如下:

...
var f1 = function(trans) {
  var store = trans.objectStore('ObjectStore');
  store.clear();
};
var f2 = function(trans) {
  var store = trans.objectStore('ObjectStore');
  store.add({id: 1, data: 'text'});
};
...
var trans = DB.connection.transaction(['ObjectStore'], IDBTransaction.READ_WRITE);
trans.onerror = function() { alert('ERROR'); };
trans.oncomplete = function() { alert('DONE'); };
...

我们的问题是我在之后立即收到“完成”警报clear并且在第二个请求时出现异常。

是否可以“重用”IndexedDB 中的事务?

UPD:我发现上面的代码在最新的 Chromium nightly build 中可以按照我的预期工作。


根据乔纳斯·西金的说法 http://blog.nparashuram.com/2011/11/indexeddb-apis-javascriptnext.html是 IndexedDB 的 Mozilla 开发者和联合规范编写者,当最后一个回调触发时,就会提交事务。因此,为了保持事务处于活动状态,您应该能够通过连续的回调重用它。

你正在使用oncomplete上面,但是onsucess也应该同样有效。

您可以找到事务对象作为回调返回的请求对象的属性。

以下句子不正确“今日交易自动提交 当事务变量超出范围并且不再有请求时 可以针对它放置”。

当变量超出时事务永远不会自动提交 范围。一般来说,他们只在最后一次成功/错误回调时提交 触发并且该回调不会安排更多请求。所以这不是 与任何变量的范围有关。

唯一的例外是,如果您创建了交易但没有放置 反对它的请求。在这种情况下,交易被“提交” (无论这对于没有请求的交易意味着什么)尽快 当您返回事件循环时。在这种情况下你可以 一旦所有提及交易,技术上就“提交”交易 超出了范围,但这并不是一个特别有趣的用例 优化。

基于一个规格示例 http://www.w3.org/TR/IndexedDB/#idl-def-IDBRequest下面,您应该能够在以下位置找到交易对象:evt.transaction,您可以进行新的交易并添加新的onsuccess事件监听器。

 var request = indexedDB.open('AddressBook', 'Address Book');
 request.onsuccess = function(evt) {...};
 request.onerror = function(evt) {...};
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 IndexedDB 的一个事务中放置多个请求 的相关文章

  • IndexedDB 数据库的使用

    前端的存储方式 前端的存储 xff0c 可以使得页面交互更加友好 xff0c 特别是在保存草稿 xff0c 网络差的情况下对用户来说是很有用的 前端的存储方式有多种 xff0c 像 Local storage Session storage
  • HTML5 视频源作为本地存储的 blob 不再工作

    从 Chrome 80 开始 Blob 或 IndexedDB 的工作方式似乎发生了变化 将视频文件作为 blob 加载并通过 createObjectURL 将其分配给 HTML5 Video 元素仍然有效 load the blob t
  • 使用较短的数组查询 IndexedDB 复合索引

    IndexedDB 允许您对多个属性创建索引 就像如果你有类似的物体 a 0 b 0 你可以建立索引a and b 复合索引的行为是很奇怪 但显然应该可以使用比复合索引短的数组进行查询 所以在我的示例中 我应该能够查询类似的内容 0 并得到
  • 如何从javascript同步调用indexeddb方法

    我有一种方法说method1在 javascript 中 有另一种方法说method2 call method2在 method2 调用之后返回 method1 中需要的一个值 var userObj first Key 1 value s
  • 导出和导入 IndexedDB 数据

    我正在制作一个供我自己使用的工具 需要一个简单的数据库 这似乎是学习 HTML5 IndexedDB API 的好机会 但重要的是我在任何时候都不会丢失数据 我想备份浏览器的配置文件目录就可以进行备份 但我也希望可能使用不同的计算机 因此导
  • 删除方法不适用于 Indexed DB HTML5...它返回成功但记录未删除

    我在使用桌面 Chrome 时遇到的 HTML5 Indexed DB 的另一个问题是我无法从对象存储中删除记录 onsuccess 事件被触发 但记录仍然存在 我的 ID 是一个时间戳 只是因为我想更快地实现一个工作应用程序 我硬编码了它
  • 如何将多级对象映射到indexedDB以获得最佳效率

    我的问题涉及在indexedDB 中布置数据结构 我开始构建一个小型网页功能 该功能逐渐发展成为一种网络学习工具 现在更接近于独立的渐进式网络应用程序 使用 localStorage 效果很好 但随着该工具的发展 5MB 限制可能会成为某些
  • 为什么此 IndexedDB put 命令失败?错误:DataError:DOM IDBDatabase 异常 0

    创建对象存储时 我已成功将以下内容添加到该对象存储中 name John Doe age 21 我使用了以下选项 keyPath id autoIncrement true 我能够找到该记录 它显示了id 1 但是 当我运行下面的命令时 它
  • IndexedDB回调不更新AngularJS中的UI

    我正在使用以下库在新的 Chrome 应用程序上访问 Angularjs 中的 IndexedDB https github com aaronpowell db js https github com aaronpowell db js
  • 如何同步访问indexedDB?

    indexedDB 有一个spec https developer mozilla org en IndexedDB Synchronous API说可以同步访问索引数据库 但还没有实现 我只是想知道是否有办法让它手动同步 我的 JavaS
  • window.mozIndexedDB 在 Firefox 15 中为 null

    我正在尝试运行 使用 IndexedDB 示例代码https developer mozilla org en US docs IndexedDB Using IndexedDB https developer mozilla org en
  • 如何在 IndexedDB 的一个事务中放置多个请求

    我的代码如下 var f1 function trans var store trans objectStore ObjectStore store clear var f2 function trans var store trans o
  • IndexedDB:承诺升级?

    刚刚开始我的第一个项目 IndexedDb 我很难尝试创建一个在第一次使用时打开和升级数据库的系统 我想使用承诺 当前角Js q https code angularjs org 1 2 22 docs api ng service 24q
  • Indexeddb:onsuccess 和 oncomplete 之间的区别?

    当 IndexedDB 事务完成或成功时 我使用两个不同的事件来响应回调 比方说 db IDBDatabase 对象 tr IDBTransaction 对象 os IDBObjectStore 对象 tr db transaction o
  • navigator.webkitPersistentStorage.requestQuota 是否适用于 IndexedDB?

    使用今天最新版本的 Android Chrome 我可以使用以下命令请求持久性 IndexedDB 存储吗 navigator webkitPersistentStorage requestQuota var requestedBytes
  • 来自 Android 版 IndexedDB Chrome 中保存的块的 HTML5 视频

    我想使用 IndexedDB 在客户端存储离线 HTML5 应用程序的视频文件 为此 我从服务器 API 中下载了 2 个块的视频 然后我将它们作为 blob 存储在 indexedDB 中 然后在其他页面上我从数据库获取它们并创建新的 b
  • 将图像文件存储在 IndexedDB 中

    我在尝试将图像文件存储在 IndexedDB 中时遇到问题 我抓取文件对象并尝试将其推送到 IndexedDB 中 但它似乎抛出错误 DOM Exception DATA CLONE ERR 25 如何将如下所示的文件对象转换为可以存储在
  • Metro IndexedDB,浏览数据库

    我正在尝试使用 IndexedDB 将数据存储在 Windows 8 的 Metro 应用程序中 我希望能够浏览数据库 以监视我的操作是否按预期修改数据 所以我的问题是 有没有办法查看地铁应用程序 IE10 的实际数据库 类似于 Chrom
  • 从 Linux bash 解析 FB-Purity 的 Firefox idb(索引数据库 API)object_data blob

    我想从 Linux bash 脚本中读取由名为 FB Purity 的特定 Firefox 插件存储的结构化数据 我找到了一个名为 mozilla firefox b8eab5j0 default storage default moz e
  • IndexedDB - 对象存储与多个数据库与索引?

    我想知道什么时候使用单个数据库与具有多个对象存储的数据库是一个好主意 我阅读了网络上的大多数教程并查看了 indexedDB 的规范 但找不到比较这些不同概念的好例子 有没有人有此类事情的具体示例 使用多个对象存储和 或代码的设计模型 只要

随机推荐