检查从索引DB异步检索的多个值

时间:2014-05-01 11:59:32

标签: javascript asynchronous indexeddb

我需要从IndexedDB中检索多个值,检查它们是否都满足某些约束(对所有这些都不同),如果是,则调用函数。为了说明这一点,更好地想象对IndexedDB的调用是同步的,我们会有类似的东西。

function myFunc(varNames, conditions) {
    for(var i = 0; i < varNames.length; i++) {
        if(!isGood(db.get(varNames[i]), conditions[i])) {
            return;
        }
    }
    doStuff();
}

由于IndexedDB是异步的,我不知道怎么做。在每次获取中使用回调是不可行的,因为对doStuff的调用取决于所有获取。在全局变量中累积结果也不会起作用,因为myFunc被调用多个。我试过像:

function myFunc(varNames, conditions) {
    var valid = 0;
    checker() {
         valid++;
         if(valid == varNames.length) {
             doStuff();
         }
    }
    for(var i = 0; i < varNames.length; i++) {
        db.get(varNames[i], function(val) {
            if(isGood(val, conditions[i]) {
                checker();
            }
        });
    }
}

但这似乎也不起作用。有什么想法吗?

1 个答案:

答案 0 :(得分:0)

您可以一次调用一个数据库,并使用成功回调进行下一次数据库调用。像这样:

function myFunc(varNames, conditions){
    if(varNames.length){
        var name = varNames.shift(),
            condition = conditions.shift();
        db.get(name, function(val){
            if(isGood(val, condition)){
                myFunc(varNames, conditions);
            }
        });
    } else {
        doStuff();
    }
}