Я использую Jquery обещания обрабатывать открытие indexedDB для хранения файлов, а затем читать и писать файлы на него (я использую их в первый раз). Как и любой из функций может быть вызвана в любом порядке, я всегда вызывать функцию, чтобы открыть DB первой перед попыткой операции, код, как показано ниже,Howto open IndexedDB только один раз с jquery обещанием
var DatabaseSingleton = (function() {
var openDbPromise = $.Deferred();
var openDb = function() {
var db;
var request = window.indexedDB.open("myDb", 2);
request.onerror = function(event) {
console.error('Error opening indexedDB connection.');
openDbPromise.reject();
}
request.onsuccess = function(event) {
console.log('db opened', request.result);
db = request.result;
db.onerror = function(event) {
console.error("Database error: " + event.target.error.name);
};
openDbPromise.resolve(db);
}
request.onupgradeneeded = function(event) {
console.log('upgrading the idb', event.target.result);
db = event.target.result;
// create a store for the files
db.createObjectStore("fileInfo", { keyPath: "name" }).createIndex("name", "name", { unique: false });
};
return openDbPromise.promise();
};
return {
// retrive a list of all files in the DB
getFilesList: function() {
var filesPromise = $.Deferred();
openDb().then(function(db) {
...
});
return filesPromise.promise();
},
// retrieve metainfo of the file specified by its fileName
getFileinfo: function (fileName) {
var getInfoPromise = $.Deferred();
openDb().then(function(db) {
...
});
return getInfoPromise.promise();
},
})();
Однако с этим я замечаю «Д.Б. открыл» быть отображается каждый раз, когда вызывается любая из функций. Есть ли лучший способ убедиться, что он только открывается один раз, а затем просто разрешен для последующих вызовов?
Хм ... какой был бы лучший способ достичь этого в этом случае? – Bootstrapper