如何等待回调函数返回?
问题描述:
我正在使用phonegap制作android应用程序。我正在使用phonegap的存储API来查询数据库。这里是我的代码:如何等待回调函数返回?
function directPath(src, dest)
{
var db = window.openDatabase("Database", "1.0", "PhoneGap Demo", 200000);
db.transaction(queryDB, errorCB);
return arrayroute;
}
function queryDB(tx)
{
tx.executeSql(query, [], querySuccess, errorCB);
}
function querySuccess(tx,results) {
//Write some code here.
}
function errorCB(err) {
alert("Error in SQL: " + err);
}
问题是我想等到回调方法querySuccess在从directPath方法返回前完成执行。
答
不要试图打破异步:你的应用程序可能会最终看起来对用户没有反应。对于之后必须执行的任何代码,使用querySuccess回调。
答
你不必等待......只写你的代码中querySuccess事后执行它....
答
我写来解决类似的问题的功能,你可以这样调用:
database("SELECT * FROM USER", function(result){
console.log(result);
});
//FUNCTION
function database(sql, callback) {
if(!callback) { callback = function(r) { console.log(r); } }
var database_name = "Database",
database_version = "1.0",
database_displayname = "DatabaseName",
database_size = 1000000,
result = {
error: -1,
message: "",
len: 0,
rows: {}
},
db = window.openDatabase(database_name, database_version, database_displayname, database_size);
db.transaction(
function (tx) {
tx.executeSql(sql, [], querySuccess, errorCB);
}, function (tx, results) {
//SUCCESS
}, function (err) {
//ERROR
}
);
function querySuccess(tx, results) {
if (results) {
result.len = results.rows.length;
result.message = "Success";
for (var i=0; i<result.len; i++){
result.rows[i] = results.rows.item(i);
}
} else {
result.len = 0;
}
callback(result);
}
function errorCB(err) {
result.error = err.code;
result.message = err.message;
callback(result);
}
}
我打电话directPath()多次,每次我想执行不同的代码。那么,我该如何解决这个问题呢? – coders1290 2012-04-09 10:09:39
你可以给directPath提供一个不同的函数指针作为第三个参数: directPath(src,dest,func) 和func将作为你的查询的成功回调传递 – allesmi 2012-04-09 12:09:13
得到它。谢谢。 – coders1290 2012-04-10 08:14:34