我正在研究数据库函数,需要从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;
}
我想我错过了一些明显的东西。
由于
安东尼
答案 0 :(得分:0)
如果我正确理解你的问题,要查看结果,你需要这个
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);
console.log(resultout);
});
}
回调将在“之后”执行,所以基本上在你的例子中你会看到一个空结果。这是因为回调的异步性质。
答案 1 :(得分:0)
我认为您正在尝试从异步请求转移到同步请求
这是一个很好的主题,您可以在网上找到许多解决此问题的帖子和解决方案
您有几种选择:
使用回调代替返回您的函数: 您的函数必须接收另一个参数(回调)并调用该回调 传递给你想要返回的值
function fetchAll (sql, params, tableref, callback) {
var fields = new Array();
for (i in tableref) {
fields.push(i);
}
getResults(sql, params, fields, function (results) {
// I WANT TO RETURN RESULTS
callback(results);
});
}
然后你可以像这样记录结果:
fetchAll(sql, params, tableref, function (results) { console.log(results); });
找到getResults
的同步版本,通常有一个函数,
也许getResultsSync
?