我使用indexedDB来存储一些离线数据。在我的代码中有一个循环插入值到商店对象:
function Insert(){
for(var i in list)
InsertList(list[i]);
alert("successful");
}
function InsertList(str){
var trans = LocalDB.indexedDB.db.transaction(StoreList, IDBTransaction.READ_WRITE);
var store = trans.objectStore(StoreList);
var data = {
"item": str};
var request = store.put(data);
request.onsuccess = function (e) { };
request.onerror = function (e) { alert("Error inserting"); };
}
警报消息将在循环执行之前显示,如果在关闭警报消息后立即刷新或关闭页面,则由于循环中断,某些值不会插入到列表中。那么我怎么知道循环已经结束然后给出一个成功的消息呢?感谢。
答案 0 :(得分:4)
indexeddb API是异步的。这意味着只有在成功时使用回调方法结束某些事情时才能获得反馈。
在您的情况下,我会以不同的方式工作并在一个事务中插入所有内容。交易完成后,您将收到回调。如果调用它,您可以确保保存所有内容并完成插入。
function Insert(){
var trans = LocalDB.indexedDB.db.transaction(StoreList, IDBTransaction.READ_WRITE);
var store = trans.objectStore(StoreList);
for(var i in list)
{
var data = { "item": list[i]};
var request = store.put(data);
request.onsuccess = function (e) { };
request.onerror = function (e) { alert("Error inserting"); };
}
trans.oncomplete = function ()
{
alert("successful");
}
}