我怎么知道indexedDB请求循环是否已经结束?

时间:2013-07-25 01:47:19

标签: javascript request indexeddb

我使用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"); };
}

警报消息将在循环执行之前显示,如果在关闭警报消息后立即刷新或关闭页面,则由于循环中断,某些值不会插入到列表中。那么我怎么知道循环已经结束然后给出一个成功的消息呢?感谢。

1 个答案:

答案 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");
    }
}