首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何通过objectstore.add()获取添加到IndexedDB中的对象的(自动递增的) id?

如何通过objectstore.add()获取添加到IndexedDB中的对象的(自动递增的) id?
EN

Stack Overflow用户
提问于 2020-08-31 11:25:24
回答 1查看 53关注 0票数 1

我正在开发一个WebExtension,并使用IndexedDB来存储对象。当我存储一个新对象时,它并不是唯一的。因此,我使用一个自动递增的id来使其唯一。在第一次添加之后,我将做一些工作,修改/更新一些属性,因此必须更新数据库中的对象。但是要更新一个对象,我需要知道它的ID,但到目前为止我还不知道。

这是我向数据库添加对象的代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
const dbName = "MyDb";
const dbVersion = 1;
const storeName = "MyStore";

function addObject(obj) {
    const request = window.indexedDB.open(dbName, dbVersion);
    request.onupgradeneeded = event => {
        const db = event.target.result;
        const objectStore = db.createObjectStore(storeName, { keyPath: 'id', autoIncrement: true });
    }
    request.onsuccess = event => {
        const db = event.target.result;
        const transaction = db.transaction(storeName, 'readwrite');
        const objectStore = transaction.objectStore(storeName);
        objectStore.add(obj);
        transaction.onerror = event => {
            console.error('Error while adding an object: ', event.target.error.message);
        };
        // How do I get/return the ID of the previously added object?
        transaction.onsuccess = event => {
            console.log(event.target.result);
        };
        transaction.oncomplete = event => {
            console.log(event.target.result);
        };
    }
}

addObject({prop1: "foo", prop2: "bar", prop3: "", prop4: ""});

类似问题的答案- herehere -建议在成功添加后查询event.target.result,但在上面的代码中返回undefined,尽管对象已经成功插入。

那么,有没有办法获取刚刚添加的对象的ID呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-09-01 06:30:57

结果是,我监听了错误的事件处理程序。您必须监听查询的onsuccess,而不是监听事务的onsuccess/oncomplete

此外,我将所有内容都包装到一个Promise中,以便能够在id可用时立即获得它。

这是一个有效的示例:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
const dbName = "MyDb";
const dbVersion = 1;
const storeName = "MyStore";

function addObject(obj) {
    return new Promise(function(resolve) {
        const request = window.indexedDB.open(dbName, dbVersion);
        request.onupgradeneeded = event => {
            const db = event.target.result;
            const objectStore = db.createObjectStore(storeName, { keyPath: 'id', autoIncrement: true });
        };
        request.onsuccess = event => {
            const db = event.target.result;
            const transaction = db.transaction(storeName, 'readwrite');
            const objectStore = transaction.objectStore(storeName);
            const query = objectStore.add(obj);
            transaction.onerror = event => {
                console.error('Error while adding an object: ', event.target.error.message);
            };
            query.onsuccess = event => {
                return resolve(event.target.result); // OR: return resolve(query.result);
            };
        };
    });
}

let id = await addObject({prop1: "foo", prop2: "bar", prop3: "", prop4: ""});
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63669887

复制
相关文章
如何在 React 中获取点击元素的 ID?
在 React 应用中,我们经常需要根据用户的点击事件来执行相应的操作。在某些情况下,我们需要获取用户点击元素的唯一标识符(ID),以便进行进一步的处理。本文将详细介绍如何在 React 中获取点击元素的 ID,并提供示例代码帮助你理解和应用这个功能。
网络技术联盟站
2023/06/07
3.5K0
WordPress 如何获取分类/标签的ID
鼠标移动到编辑处,看到浏览器底部出现链接,其中的tag_ID=5中这个5就是分类的ID,标签同理。
可定
2020/04/20
5.8K0
WordPress 如何获取分类/标签的ID
浏览器里的本地数据库:IndexedDB
在现代浏览器的本地存储方案中,indexedDB 是一项重要的能力组成, 它是可以在浏览器端使用的本地数据库,可以存储大量数据,提供接口来查询,还可以建立索引,这些都是其他存储方案 Cookie 或者 LocalStorage 无法提供的能力。单从数据库类型来看,IndexedDB 是一个非关系型数据库(不支持通过 SQL 语句操作)。
政采云前端团队
2019/12/19
1.4K0
pgsql 通过 序列 批量获取ID
CREATE OR REPLACE FUNCTION getNextIds (VARCHAR,INTEGER) RETURNS VARCHAR AS $body$ DECLARE str VARCHAR ; DECLARE nextid VARCHAR ; BEGIN str = ''; FOR i in 1..$2 loop nextid = (SELECT NEXTVAL($1)); str = str || nextid || ';' ; EN
qubianzhong
2018/08/08
3.9K0
通过进程句柄获取窗口句柄_如何查看进程id
大家好,我是架构君,一个会写代码吟诗的架构师。今天说一说通过进程句柄获取窗口句柄_如何查看进程id,希望能够帮助大家进步!!!
Java架构师必看
2022/07/19
5.1K0
sqlachemy 获取新创建对象的id,flush与commit
for account_info in valid_account_detail: try: account = account_info.get('account') password = account_info.get('password') # date = account_info.g
用户1214487
2018/05/28
1.2K0
如何查找递增连续数组中缺失的数字
在一个长度为n的递增数组中,数组中元素范围是0 ~ n-1,如何在这个递增连续数组中查找缺失的数字? 分析下: 1. 排序数组中的搜索算法,首先想到的就是二分法查找 2. 丢失的数字之前的左子数组:n
一个架构师
2022/06/20
3.2K0
如何查找递增连续数组中缺失的数字
Web 中使用 IndexedDB 实现缓存
说起 Web 缓存,我们自然就会想到 Cookie,LocalStorage 和 SessionStorage,却很少提及 IndexedDB。
Jimmy_is_jimmy
2022/11/21
1.3K0
Web 中使用 IndexedDB 实现缓存
mybatis获取update的id
平常我门都是更新数据,用更新的条件再查询一次,得到更新的记录。这样我门就进行了两次数据库操作,链接了两次数据库。增加了接口的处理事件,因为链接数据库是很耗时的操作。 其实可以通过 mybatis 的 selectKey 标签来解决这个问题。  selectKey 这个标签大家基本上都用过,比如在插入数据的时候,返回插入数据的纪录。如: <selectKey resultType="int" order="AFTER" keyProperty="id"> SELECT
似水的流年
2018/03/28
3.8K0
mybatis获取update的id
平常我门都是更新数据,用更新的条件再查询一次,得到更新的记录。这样我门就进行了两次数据库操作,链接了两次数据库。增加了接口的处理事件,因为链接数据库是很耗时的操作。
似水的流年
2018/01/25
9.3K0
mybatis获取update的id
平常我门都是更新数据,用更新的条件再查询一次,得到更新的记录。这样我门就进行了两次数据库操作,链接了两次数据库。增加了接口的处理事件,因为链接数据库是很耗时的操作。
似水的流年
2019/12/06
3.4K0
displaytag如何实现获取到每行的id字段的值。
  使用封装好的框架,有时候,对于一个知识点不熟悉,可能会浪费你大把的时间,我使用displaytag主要是使用它的分页技术,但是客户提出的需求,是获取到每行的id,然后选择一个用户名称(用户id),将他们关联操作,其实业务很简单,但是获取到你想要的这一行,一开始确实难为着我了,后来才发现,很简单。
别先生
2019/06/03
4.7K0
通过Windows进程ID获取窗口句柄
通过以上两种窗口获得的句柄,和使用FindWindow获得的句柄是一样的。 可以通过SendMessage向窗口发送消息
全栈程序员站长
2022/09/16
3.4K0
如何通过查询Google Analytics ID来获取相关联的域名和子域名
关于DomainRelationShips DomainRelationShips这个脚本可以利用一个URL地址并通过Google Analytics IDs来查询相关联的域名和子域名。首先,我们
FB客服
2023/03/30
5.6K0
如何通过查询Google Analytics ID来获取相关联的域名和子域名
element--ui使用tab切换时获取当前对象的id
1.问题 有些特定的时候,使用Tab切换时需要获取当前选中栏的ID来进行操作 1 2. 解决思路 通过定义一个函数进行函数绑定,函数会传递过去当前对象,通过当前对象获取对象属性 1 3.解决方法 下面展示一些 内联代码片。 ··· tab.vue <template> <el-tabs v-model="switch" @tab-click="tabClick"> <el-tab-pane class="tab" label="Tab1" name="tabOne"></el-ta
用户7741497
2022/03/20
5.3K1
如何通过反射调用对象的方法?
import java.lang.reflect.Method; class MethodInvokeTest { public static void main(String[] args) throws Exception { String str = "hello"; Method m = str.getClass().getMethod("toUpperCase"); System.out.println(m.invoke(str));
唐怀瑟
2018/08/30
2.8K0
通过设备管理对象获取assets的文件资源
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 随后会出来这个页面,要选中Change Folder Location,然后接着看下面的图(有具体操作步骤)
是阿超
2022/09/21
9050
通过设备管理对象获取assets的文件资源
JQuery如何获取ID含有特殊字符的DOM元素
为业务需要,DOM元素的ID被命名为“c-order.range”,执行JQuery的DOM查询时,提示如下错误
黄啊码
2021/09/26
10.8K0
点击加载更多

相似问题

indexeddb objectstore.add() keypath = 'id‘

24

获取添加到indexedDB对象存储中的对象的id

19

在MySQL中通过自动递增获取上次创建的ID

21

如何使用SQLiteCommand对象获取自动递增的ID插入行

112

核心数据中的自动递增对象ID?

40
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文