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

How can I know if an indexedDB request loop has ended or not?

本文关键字:结束 是否 循环 indexedDB 请求 我怎么知道      更新时间:2023-09-26

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

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

索引器ddb 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");
    }
}