首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何同步遍历indexedDB表?

如何同步遍历indexedDB表?
EN

Stack Overflow用户
提问于 2012-08-23 20:56:02
回答 2查看 3.6K关注 0票数 4

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

代码语言:javascript
复制
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()才会在成功找到最大的最后修改记录时返回。如果需要,我可以同步调用此方法(readData())来获取2-3个表的最后修改记录。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-08-23 21:20:39

同步API仅在webworker中可用。所以这将是第一个要求。(据我所知,目前只有IE10支持此功能)

您可以提供的另一种方法是使用JS1.7并使用yield关键字。有关它的更多信息,请查看here

我建议使用当您达到最新值时调用的callbakck方法。

代码语言:javascript
复制
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); 
   }
} 
票数 5
EN

Stack Overflow用户

发布于 2012-09-04 00:44:57

顶框IndexedDB接口为异步。异步不能是同步的。但您可以在单个事务中读取所有表。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12092083

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档