Javascript 在indexedDb中添加多个对象的正确方法?
我有以下要添加到indexedDb的对象数组:Javascript 在indexedDb中添加多个对象的正确方法?,javascript,html,indexeddb,Javascript,Html,Indexeddb,我有以下要添加到indexedDb的对象数组: const data = [ { name: 'abc', color: 'blue' }, { name: 'xyz', color: 'red' }, { name: 'yui', color: 'black' }]; 现在,我创建数据库并将此数据插入存储,如下所示: if (!db.objectStoreNames.contains("people")) {
const data = [
{ name: 'abc',
color: 'blue'
},
{ name: 'xyz',
color: 'red'
},
{ name: 'yui',
color: 'black'
}];
现在,我创建数据库并将此数据插入存储,如下所示:
if (!db.objectStoreNames.contains("people")) {
peopleStore = db.createObjectStore("people", { keyPath: "name" });
peopleStore.createIndex("color", "color", { unique: false });
peopleStore.transaction.oncomplete = function(event) {
data.forEach(function(data) {
operations.add(data);
});
};
}
我已经用add()
(在const operations
中)方法定义了一个函数表达式,如下所示:
add: function(data) {
let request = db
.transaction(["people"], "readwrite")
.objectStore("people")
.add(data);
}
下面是我的问题:
edit()
,delete()
,等等,其中每个方法都有一个“request
”变量,用于定义事务,类似于我上面所示的方法)。
我是否应该创建一个如下所示的全局变量:if (!db.objectStoreNames.contains("people")) {
peopleStore = db.createObjectStore("people", { keyPath: "name" });
peopleStore.createIndex("color", "color", { unique: false });
peopleStore.transaction.oncomplete = function(event) {
data.forEach(function(data) {
operations.add(data);
});
};
}
const globalTrans=db.transaction([“people”],“readwrite”).objectStore(“people”)代码>
创建新事务是一项成本高昂的操作吗
提前感谢所有花时间回复的人!:) 创建全局变量将产生问题。可能是某个事务正在运行,而对于另一个操作,您可能会覆盖它
e、 g-
有很多方法可以解决这个问题-
根据场景创建多个方法-
修改函数以仅接收数组值-
希望这能回答您的问题。请注意。。。在您的函数addMultiple(data,callback)
此行let request=tx.objectStore(“people”).add(data)代码>应为let request=tx.objectStore(“人”).add(值)代码>。注意“值”的变化A是的,谢谢你指出。更新代码。
// for single value
function add(data) {
let request = db.transaction(["people"], "readwrite").objectStore("people").add(data);
}
// for multiple value
function addMultiple(datas, callback) {
const tx = db.transaction(["people"], "readwrite");
datas.forEach(data => {
let request = tx.objectStore("people").add(data);
})
tx.oncomplete = function(event) {
callback();
}
};
// so now data will be only array
function add(datas, callback) {
const tx = db.transaction(["people"], "readwrite");
datas.forEach(data => {
let request = tx.objectStore("people").add(data);
})
tx.oncomplete = function(event) {
callback();
}
};
// so when want to insert single value , we will call like this.
const value = {
id: 1,
name: 'ujjwal'
}
add([value], () => {
})