【发布时间】:2014-11-04 11:03:55
【问题描述】:
我正在使用带有最新 chrome/chromium 版本的 IndexedDB,但我仍然遇到以下问题。 我尝试在创建数据库之前将其删除,如下面的代码所示。
我第一次执行此代码时,'onupgradeneeded' 已正确记录。 此时,DB 存在。 然后,如果您运行相同的代码,数据库会被正确删除,但不会再次调用 onupgradeneeded 回调。
我在其他任何地方都没有在规范中找到任何相关信息。所以如果有人知道如何解决这个问题,我很感兴趣。
更新:
<script type="text/javascript">
var module={
dbName: 'myDB',
dbVersion: 1,
dbStores:[{name:'places', keyPath:'id'}],
/* START :: DEFINE MAINONLINE INTERFACE FUNCTIONS */
test: function(){
var that= this;
this.deleteDB()
.then(function(e){
return that.createEmptyDB(e);}
)
.catch(function(error){
that.logError(error);
});
},
logError: function(e){
console.log('An error occured');
if (e.target && e.target.errorCode){
console.log('errorCode = ' + e.target.errorCode);
}else{
console.log(e);
}
},
deleteDB: function(){
return new Promise(function(resolve, reject){
var deleteDbRequest= indexedDB.deleteDatabase(this.dbName);
deleteDbRequest.onsuccess= function(e){
console.log('deleted successfully');
resolve(e);
}
deleteDbRequest.onerror= function(e){
console.log('error while deleting');
reject(e);
}
deleteDbRequest.onblocked= function(e){
console.log('blocked, unable to delete');
reject(e);
}
});
},
createEmptyDB: function(event){
var that= this;
return new Promise(function(resolve, reject){
var openDbRequest= indexedDB.open(that.dbName, that.dbVersion);
openDbRequest.onerror= function(e){
console.log('error');
reject(e);
}
openDbRequest.onblocked=function(e){
console.log('The open request is blocked');
}
openDbRequest.onsuccess= function(e){
console.log('onsuccess');
resolve(e);
}
openDbRequest.onupgradeneeded= function(e){
console.log('onupgradeneeded');
}
});
}
}
module.test();
</script>
提前致谢
【问题讨论】:
标签: javascript indexeddb