我需要从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();
}
});
}
}
但这似乎也不起作用。有什么想法吗?
答案 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();
}
}