如何同步遍历indexedDB表?

时间:2012-08-23 12:56:02

标签: html5 indexeddb

我想在JS中编写一个函数,我将遍历索引数据库中的表并获取表的最后修改的最大值并返回

function readData(){
    var trans = '';
    trans = idb.transaction(["tableName"],'readonly'); // Create the transaction
    var request = trans.objectStore("tableName").openCursor();
    request.onsuccess = function(e) {
        var cursor = request.result || e.result; 
        if(cursor) {
            // logic to  and find maximum
        } else {
            return // max last modified
        }
        cursor.continue();
    }
}

IMP - 由于onsuccess方法是异步的,我怎么能让它同步?这样我的方法readData()只有在成功找到max last modified record时才会返回。如果需要,我可以同步调用此方法(readData())以获取2-3个表的最后修改记录。

2 个答案:

答案 0 :(得分:4)

同步API仅适用于网络工作者。所以这将是第一个要求。 (据我所知,目前IE10只支持此功能)

您可以提供的另一个镜头是使用JS 1.7并使用yield关键字。有关它的更多信息,请查看here

我会使用callbakck方法来处理,当你达到最新值时调用它。

function readData(callback){     
   var trans = '';         
   trans = idb.transaction(["tableName"],'readonly'); //Create the transaction   
   var request = trans.objectStore("tableName").openCursor();
   var maxKey;      
   request.onsuccess = function(e) {   
       var cursor = request.result || e.result;             
       if(cursor.value){             
          //logic to  and find maximum
          maxKey = cursor.primaryKey            
          cursor.continue();
       }
   } 
   trans.oncomplete = function(e) {
        callback(maxKey); 
   }
} 

答案 1 :(得分:1)

顶部框架中的IndexedDB API是异步的。 async不能同步。但是您可以在单个事务中读取所有表。