JavaScript: 自定义回调函数
JavaScript: custom callBack function
我是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 获取数据,我希望它 return 是我的 sqlData(它是一个数组)。问题是当我调用函数获取 return 值时,它还没有完成从 WebSql 获取数据,所以我得到了 nil。我认为 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 中获取 return?
callback 是一些工作完成时调用的简单函数,在 javascript 中你可以将它传递给变量,所以在你的 async/worker 函数中一旦完成作业,您必须调用回调函数(如 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,...)
// 当你没有错误时 result
callback(error)
// 当你有错误但没有结果时
我是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 获取数据,我希望它 return 是我的 sqlData(它是一个数组)。问题是当我调用函数获取 return 值时,它还没有完成从 WebSql 获取数据,所以我得到了 nil。我认为 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 中获取 return?
callback 是一些工作完成时调用的简单函数,在 javascript 中你可以将它传递给变量,所以在你的 async/worker 函数中一旦完成作业,您必须调用回调函数(如 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,...)
// 当你没有错误时 result
callback(error)
// 当你有错误但没有结果时