开发者

Capture value from nested function in JavaScript

开发者 https://www.devze.com 2023-01-17 04:47 出处:网络
I have the followingcode snippet : function getCheckListTaskWithId(id){ var tempTask = db.readTransaction(function (tx) {

I have the following code snippet :

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 t开发者_运维问答emp= new CheckListTask(task.id,task.crud,task.name,task.status);
        alert(temp);

      }   
    });

  });

}

the function that I pass to the tx.execute method is a call back function. Now I wan to return temp var present in callback function, from getCheckListTaskWithId function.

How Do I do this?


I am assuming that the executions of db.readTransaction and tx.executeSql are asynchronous. So you cannot return the result from them, as you don't know when they'll finish. The solution is use an asynchronous callback yourself. Make the getCheckListTaskWithId take a callback function as an argument and call it when result it available.

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);
            }   
        });
    });
}


Rewrite tx.executeSql so it gets the return value of the callback and returns it.

This assumes that tx.executeSql doesn't perform any Ajax. Ajax is Asynchronous, so an HTTP request is made, execution continues as normal and another function is run when the request comes back. In this case it is far too late to return a value to the earlier function and anything that needs to be done with the data can only be done by the callback.

0

精彩评论

暂无评论...
验证码 换一张
取 消