Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
jaydata的IndexedDB错误-尝试在不允许突变的数据库上执行突变操作_Indexeddb_Jaydata - Fatal编程技术网

jaydata的IndexedDB错误-尝试在不允许突变的数据库上执行突变操作

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

我有两个DBs。我想清除数据库并添加新内容。我使用下面的方法

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票吗?