2014-09-30 55 views
1

我想在单元测试期间反复创建并删除一个名称相同的('Test')PouchDB数据库。但是,如果在删除它之前至少向数据库添加一个文档,那么下次尝试创建它时出现以下错误:无法重新创建具有相同名称的PouchDB数据库

“未捕获的NotFoundError:未能在'IDBTransaction'上执行'objectStore':指定没有找到对象存储区。“

这发生在pouchdb.js:1950:

var docStore = transaction.objectStore(DOC_STORE); // PouchDB 3.0.6 

然后,如果我看是IndexedDB,数据库确实存在,但只有下列信息:

Security origin:http://localhost:8000 
Name:_pouch_Test 
Integer Version:1 
String Version: 

然后,如果我尝试删除这个数据库,Angular抛出一个'CustomPouchError',我没有找到它。

下面是我的应用程序相关的代码片段:

var db = new PouchDB(dbName, function(err, result) { 
    if (!err) { 
     $log.info('Database \'' + dbName + '\' opened'); // Happens when I first create 'Test' 
    } else { 
     $log.info('Database \'' + dbName + '\' failed to open'); // Happens when I try to re-create 'Test' 
    } 
}); 

db.destroy(function (err, info) { 
    if (err) { 
     $log.error(err); 
    } else { 
     $log.info("Database destroyed"); // Happens when I delete 'Test' 
    } 
}); 

但是,如果我添加任何文件之前删除数据库,它是IndexedDB消失,然后我可以重新创建。

感谢您的帮助。

回答

0

找到了解决方法。销毁后,在“then”函数中创建一个新的PouchDB对象。它在你下次使用时很好。例如,

var db = new PouchDB('Xyz'); 

db.destroy().then(function (response) { 
     db = new PouchDB('Xyz'); 
    });