从JavaScript中的嵌套函数中捕获值

时间:2010-09-19 07:08:11

标签: javascript

我有以下代码段:

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。

我该怎么做?

2 个答案:

答案 0 :(得分:1)

我假设db.readTransactiontx.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请求,执行继续正常,并在请求返回时运行另一个函数。在这种情况下,将值返回到早期函数为时已晚,并且只需要通过回调完成需要对数据执行的任何操作。