我包含了在数据库中创建4个objectStore的说明,但程序在创建第一个后停止。
为了克服这个问题,我在每个创建结束时放了一个alert(...)
,并且,通过这个中断,一切都可以正常运行。
有没有办法让一切工作,而不插入这些休息?
即使我读取了4个ObjectStore的记录数,我发现这个问题,所以我总是在每条指令后放alert(...)
。
我也尝试过使用' onsuccess'和' onerror',但我总是有错误。
...
我终于解决了使用jQuery' Promise'这对于解决异步Javascript和IndexedDB的问题至关重要。 这是工作代码:
function getRecordsCountDeferred_1(tableName) {
var defer = $.Deferred();
var req,objectStore;
objectStore=db.transaction([tableName],"readonly").objectStore(tableName);
req=objectStore.count();
req.onsuccess = function(e) {
var result = e.target.result;
defer.resolve({'count':result,'mess':tableName+' '+result+' records'});
};
req.onerror = function(event) {
alert('Errore');
};
return defer.promise();
}
function getRecordsCountDeferred(tableName) {
var myPromise = getRecordsCountDeferred_1(tableName);
$.when(myPromise).done(function(data){
var mess=$('#info-span').html()+" "+tableName+": records count: "+data.count+"<br>";
$('#info-span').html(mess);
}).fail(function(data){
alert("Errore");
});
}
答案 0 :(得分:0)
我确信它与4 objectStore无关。它必须是最后一次数据库请求结果错误并自动中止事务。
如果您想继续中止的交易,可以在event.preventDefault()
回拨时拨打onerror
。
答案 1 :(得分:0)
代码:
function infoDB(force) {
if (!force) return;
var count, tableName;
var mess = 'Info sul database locale ' +
db.name + ' - Versione ' + db.version + ':<br>';
for (i = 0; i < db.objectStoreNames.length; i++) {
tableName = db.objectStoreNames[i]
count = getRecordsCount(tableName);
mess += (i + 1) + ') ' + tableName + ' (' + count + ')<br>';
}
$("#info-span").html(mess);
}
function getRecordsCount(tableName) {
var req, objectStore;
objectStore = db.transaction([tableName], "readonly").objectStore(tableName);
req = objectStore.count();
count = -1;
if (req != null) {
alert("getRecordsCount\n" + req + " - " + tableName);
count = req.result;
}
return count;
}
答案 2 :(得分:0)
如果我注释掉这条线: // // alert('getRecordsCount \ n'+ req +“ - ”+ tableName); // 函数InfoDB没有返回任何内容,在控制台firebug中出现此错误:
// InvalidStateError: An attempt was made to use an object that is not,
// or is no // longer, usable
//
// count=req.result;