【发布时间】:2012-12-08 04:38:48
【问题描述】:
我正在处理一个数据库函数,需要从 fetchAll 返回结果,以便我可以在代码的其他地方使用它,但不知道该怎么做:
function fetchAll(sql,params,tableref){
var fields = new Array();
var resultout = new Array();
for (i in tableref){
fields.push(i);
}
getResults(sql,params,fields,function(results){
// I WANT TO RETURN RESULTS
resultout.push(results);
});
// TO HERE SO I CAN RETURN from Fetchall
console.log(resultout);
}
function getResults(query,params,fields,callBack){
var result = new Array();
thisDB.transaction(function (tx) {
tx.executeSql(query,params, function(tx, rs){
for(var i=0; i<rs.rows.length; i++) {
var row = rs.rows.item(i);
var rowresults = new Object();
for (x=0;x<fields.length;x++){
rowresults[fields[x]] = row[fields[x]];
}
result.push(rowresults);
}
callBack(result);
});
});
return result;
}
我认为我遗漏了一些明显的东西。
谢谢
安东尼
【问题讨论】:
-
如果我的理解正确,您应该将 console.log 调用放在回调中(在 resultout.push 下方)。
-
您能具体描述一下您的问题是什么吗?这段代码到底应该做什么,而它又做了什么?
-
简短的回答是不要让
fetchAll返回一个值。相反,让fetchAll接受在getResults的回调中调用的回调。当函数依赖于异步方法来获取该值时,您不能让函数同步返回该值。
标签: javascript callback closures opendatabase