1

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

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

4

1 回答 1

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");
    }
}
于 2013-07-25T08:07:53.913 回答