我是js计划的新成员,请原谅我,如果有些不清楚但请让我知道这个问题。
请先查看我的代码:
function catchDataFromDB(db, tableName, callBack) {
var sqlStr = 'SELECT * FROM ' + tableName;
var sqlData = [];
db.transaction(function(t) {
// Query out the data
t.executeSql(sqlStr, [], function(t, SQLResultSet) {
var len = SQLResultSet.rows.length,
row;
for (var i = 0; i < len; i++) {
row = SQLResultSet.rows.item(i);
sqlData.push(row);
}
console.log(sqlData);
});
},
function(SQLError) {
console.warn(SQLError.message);
});
return sqlData;
}
此函数用于从WebSql获取数据,我希望它为我返回sqlData(它是一个数组)。问题是当我调用函数获取返回值时,它没有完成从WebSql获取数据,所以我没有。我认为callBack函数对于获取正确的数据很有用,但我不知道该怎么做。谢谢你的帮助。
其他 我找到了this page的方法,代码如下:
function doSomething(callback) {
// ...
// Call the callback
callback('stuff', 'goes', 'here');
}
function foo(a, b, c) {
// I'm the callback
alert(a + " " + b + " " + c);
}
doSomething(foo);
但是当我调用函数doSomething时如何从函数foo返回?
答案 0 :(得分:1)
回调是一些简单的函数,在某些工作完成后调用,在javascript中你可以在变量中传递它,所以在你的异步/工作函数中你必须调用回调函数(比如{{1一旦它完成了工作。
所以你的代码应该是
callback(result)
按惯例,回调的第一个参数应该是错误(如果你有的话),其余的参数都是结果
function catchDataFromDB(db, tableName, callBack) {
var sqlStr = 'SELECT * FROM ' + tableName;
db.transaction(function(t) {
// Query out the data
t.executeSql(sqlStr, [], function(t, SQLResultSet) {
var len = SQLResultSet.rows.length,
row;
for (var i = 0; i < len; i++) {
row = SQLResultSet.rows.item(i);
sqlData.push(row);
}
callBack(null, sqlData);
});
},
function(SQLError) {
callBack(SQLError.message);
});
}
//当你没有错误时,只有结果
callback(null, result1, result2,...)
//当您有错误但没有结果时