处理索引数据库 api 连接的更好方法?
Better way to handle connections for indexed db api?
我正在使用 html5 索引数据库 api 来存储缓存,但是当我尝试删除数据库时,我经常收到关于连接被阻止的错误。后来我意识到这可能是因为我没有明确关闭连接。我所做的只是打开它,并将数据库变量存储在一个全局变量中,然后只使用它,永远不要关闭它。
但现在我想我有两种选择来处理它,但不确定哪一种更好。在我的应用程序中,会多次读取和写入数据库,并且可能同时发生。
所以我的两个方法是
1) 每次读取或写入时,我都会将数据库打开到一个新变量中,并在完成任务后将其关闭。
2) 只在我写或读时打开它,如果它还没有打开,那么在你完成它之后,只有在没有其他人使用它时才关闭它。如果有其他东西,则保持打开状态,因为其他东西会关闭它。
有谁知道其中之一是否会更好用?
谢谢
我喜欢每次打开和关闭。答案是主观的。
另一个未说明的选项是侦听在连接处触发的 "versionchange"
事件并关闭连接以响应取消阻止删除。
var connection;
var open = indexedDB.open(name, version);
open.onupgradeneeded = function() {
// populate schema here
};
open.onsuccess = function() {
connection = open.result;
connection.onversionchange = function(e) {
if (e.newVersion === 0)
console.log('being deleted');
else
console.log('being upgraded');
connection.close();
connection = null; // so other code can tell it is closed
};
};
我正在使用 html5 索引数据库 api 来存储缓存,但是当我尝试删除数据库时,我经常收到关于连接被阻止的错误。后来我意识到这可能是因为我没有明确关闭连接。我所做的只是打开它,并将数据库变量存储在一个全局变量中,然后只使用它,永远不要关闭它。
但现在我想我有两种选择来处理它,但不确定哪一种更好。在我的应用程序中,会多次读取和写入数据库,并且可能同时发生。
所以我的两个方法是
1) 每次读取或写入时,我都会将数据库打开到一个新变量中,并在完成任务后将其关闭。
2) 只在我写或读时打开它,如果它还没有打开,那么在你完成它之后,只有在没有其他人使用它时才关闭它。如果有其他东西,则保持打开状态,因为其他东西会关闭它。
有谁知道其中之一是否会更好用?
谢谢
我喜欢每次打开和关闭。答案是主观的。
另一个未说明的选项是侦听在连接处触发的 "versionchange"
事件并关闭连接以响应取消阻止删除。
var connection;
var open = indexedDB.open(name, version);
open.onupgradeneeded = function() {
// populate schema here
};
open.onsuccess = function() {
connection = open.result;
connection.onversionchange = function(e) {
if (e.newVersion === 0)
console.log('being deleted');
else
console.log('being upgraded');
connection.close();
connection = null; // so other code can tell it is closed
};
};