jaydata的IndexedDB错误-尝试在不允许突变的数据库上执行突变操作
我有两个DBs。我想清除数据库并添加新内容。我使用下面的方法jaydata的IndexedDB错误-尝试在不允许突变的数据库上执行突变操作,indexeddb,jaydata,Indexeddb,Jaydata,我有两个DBs。我想清除数据库并添加新内容。我使用下面的方法 function updateDB(db, dbInstance, newElements) { return dbInstance.forEach(function(oldElement) { dbInstance.remove(oldElement); }).then(function() { console.log('Deleted all rows'); retu
function updateDB(db, dbInstance, newElements) {
return dbInstance.forEach(function(oldElement) {
dbInstance.remove(oldElement);
}).then(function() {
console.log('Deleted all rows');
return db.saveChanges(function() {
dbInstance.addMany(newElements);
return db.saveChanges(function(){
console.log('Added '+newElements.length+' rows');
return true;
});
});
});
}
从技术上讲,我调用上述方法两次。i、 e
return updateDB(db1, db1.dbIns1, newElements1).then(function() {
return updateDB(db2, db2.dbIns2, newElements2).then(function() {
return true;
});
});
该方法的定义如下。这是在加载时完成的,并调用onready方法:
$data.Entity.extend("Db1Name", {
Id: { type: "string", key: true},
Name: { type: "string"},
Values : {type: "string"}
});
$data.EntityContext.extend("db1Test", {
db1Ins: { type: $data.EntitySet, elementType: Db1Name }
});
var db1 = new db1Test({ name: "indexedDb", databaseName: "db1Ins" });
在Firefox中执行此操作时,我发现
InvalidStateError:在不允许变异的数据库上尝试了变异操作。
多次执行db.saveChanges()时。这是代码问题吗?它在Chrome中运行良好。您的名字有误导性,当您调用db1是一个实例时,db1Ins是一个EntitySet,Db1Name是一个entitytype。函数中的参数名也不正确:db是上下文,dbInstance是entityset。我建议你使用好名字
我不喜欢混合回调和承诺链,所以让我们重写它:
function updateDB(ctx, set, newElements) {
return set.toArray()
.then(function(oldElements) {
oldElements.forEach(function(oldElement) {
set.remove(oldElement);
};
console.log('Deleted all rows');
return ctx.saveChanges();
})
.then(function() {
set.addMany(newElements);
return ctx.saveChanges();
})
.then(function(l){
console.log('Added '+l+' rows');
return true;
});
}
请试试这个版本,我觉得这是个问题。。。你介意在这张票上开一张github票吗?