我有以下代码段:
function getCheckListTaskWithId(id){
var tempTask = db.readTransaction(function (tx) {
tx.executeSql('SELECT * FROM checklisttasks where id=? ', [id], function (tx, results) {
var len = results.rows.length;
if(len>0){
var task=results.rows.item(0);
var temp= new CheckListTask(task.id,task.crud,task.name,task.status);
alert(temp);
}
});
});
}
我传递给tx.execute方法的函数是一个回调函数。现在我想从getCheckListTaskWithId
函数返回回调函数中的temp var。
我该怎么做?
答案 0 :(得分:1)
我假设db.readTransaction
和tx.executeSql
的执行是异步的。所以你不能返回他们的结果,因为你不知道什么时候他们会完成。解决方案是自己使用异步回调。使getCheckListTaskWithId
将回调函数作为参数,并在结果可用时调用它。
function getCheckListTaskWithId(id, callback) {
var tempTask = db.readTransaction(function (tx) {
tx.executeSql('SELECT * FROM checklisttasks where id=? ', [id], function (tx, results) {
var len = results.rows.length;
if(len > 0) {
var task=results.rows.item(0);
var temp= new CheckListTask(task.id,task.crud,task.name,task.status);
alert(temp);
callback(temp);
}
});
});
}
答案 1 :(得分:0)
重写tx.executeSql
,以便获取回调的返回值并将其返回。
这假定tx.executeSql
不执行任何Ajax。 Ajax是异步的,因此发出HTTP请求,执行继续正常,并在请求返回时运行另一个函数。在这种情况下,将值返回到早期函数为时已晚,并且只需要通过回调完成需要对数据执行的任何操作。