javascript基础学习系列九百二十九:事务

创建了对象存储之后,剩下的所有操作都是通过事务完成的。事务要通过调用数据库对象的
transaction()方法创建。任何时候,只要想要读取或修改数据,都要通过事务把所有修改操作组织
起来。最简单的情况下,可以像下面这样创建事务:
let transaction = db.transaction();
如果不指定参数,则对数据库中所有的对象存储有只读权限。更具体的方式是指定一个或多个要访
问的对象存储的名称:
let transaction = db.transaction(“users”);
这样可以确保在事务期间只加载users 对象存储的信息。如果想要访问多个对象存储,可以给第
一个参数传入一个字符串数组:
let transaction = db.transaction([“users”, “anotherStore”]);
如前所述,每个事务都以只读方式访问数据。要修改访问模式,可以传入第二个参数。这个参数应
该是下列三个字符串之一:“readonly”、“readwrite"或"versionchange”。比如:
let transaction = db.transaction(“users”, “readwrite”);
这样事务就可以对users 对象存储读写了。
有了事务的引用,就可以使用objectStore()方法并传入对象存储的名称以访问特定的对象存储。
然后,可以使用add()和put()方法添加和更新对象,使用get()取得对象,使用delete()删除对象,
使用clear()删除所有对象。其中,get()和delete()方法都接收对象键作为参数,这5 个方法都创
建新的请求对象。来看下面的例子:
const transaction = db.transaction(“users”),
store = transaction.objectStore(“users”),
request = store.get(“007”);
request.onerror = (event) => alert(“Did not get the object!”);
request.onsuccess = (event) => alert(event.target.result.firstName);
因为一个事务可以完成任意多个请求,所以事务对象本身也有事件处理程序:onerror 和oncomplete。
这两个事件可以用来获取事务级的状态信息:
transaction.onerror = (event) => {
// 整个事务被取消
};
transaction.oncomplete = (event) => {
// 整个事务成功完成
};
注意,不能通过oncomplete 事件处理程序的event 对象访问get()请求返回的任何数据。因此,
仍然需要通过这些请求的onsuccess 事件处理程序来获取数据。
插入对象
拿到了对象存储的引用后,就可以使用add()或put()写入数据了。这两个方法都接收一个参数,
即要存储的对象,并把对象保存到对象存储。这两个方法只在对象存储中已存在同名的键时有区别。这
种情况下,add()会导致错误,而put()会简单地重写该对象。更简单地说,可以把add()想象成插入
新值,而把put()想象为更新值。因此第一次初始化对象存储时,可以这样做:
// users 是一个用户数据的数组
for (let user of users) {
store.add(user);
}
每次调用add()或put()都会创建对象存储的新更新请求。如果想验证请求成功与否,可以把请求
对象保存到一个变量,然后为它添加onerror 和onsuccess 事件处理程序:
// users 是一个用户数据的数组
let request,
requests = [];
for (let user of users) {
request = store.add(user);
request.onerror = () => {
// 处理错误
};
request.onsuccess = () => {
// 处理成功
};
requests.push(request);
}
创建并填充了数据后,就可以查询对象存储了。

  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值