Javascript 检查从索引数据库异步检索的多个值
我需要从IndexedDB中检索几个值,检查它们是否都满足某个约束(所有的约束都不同),如果满足,则调用一个函数。为了更好地说明这一点,假设对IndexedDB的调用是同步的,我们将有如下内容Javascript 检查从索引数据库异步检索的多个值,javascript,asynchronous,indexeddb,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])) {
function myFunc(varNames, conditions) {
for(var i = 0; i < varNames.length; i++) {
if(!isGood(db.get(varNames[i]), conditions[i])) {
return;
}
}
doStuff();
}
但这似乎也不起作用。有什么想法吗?您可以一次进行一次DB调用,然后使用成功回调进行下一次DB调用。大概是这样的:
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();
}
}
看看有什么想法。tl;dr:使用承诺。您的函数声明必须以
function
作为前缀,否则会出现语法错误。
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();
}
}