2012-01-04 57 views
2

我想将SQLite数据库命令封装在'DBManager'类中。读取数据,我写了下面几行:用于javascript数据库操作的对象方法内的异步回调

DBManager.prototype.readMyData = function(param1, param2) { 
this.db.transaction(function(tx) { 
    tx.executeSql("SELECT * FROM myTable WHERE param1 <= ?", 
    [param1], 
    function(tx, result) { 
     var myData = []; 
     for (var i=0; i<result.rows.length; i++) { 
       var row = result.rows.item(i); 
       myData.push(row); 
       } 
    }, 
    errorHandler); 
}); 
    return myData; 

}

的问题:如果我调用该方法readMyData()的返回指令的交易方法和其内部的东西之前执行。

我该如何处理它,以便返回值readMyData()不是空的,而是包含myData数组?

回答

1

你不能,你必须提供一个回调来readMyData

DBManager.prototype.readMyData = function(param1, param2, callback) { 
    this.db.transaction(function(tx) { 
     tx.executeSql("SELECT * FROM myTable WHERE param1 <= ?", [param1], 
      function(tx, result) { 
       var myData = []; 
       for (var i=0; i<result.rows.length; i++) { 
        var row = result.rows.item(i); 
        myData.push(row); 
       } 
       callback(myData); // <- passing the data to the callback 
      }, 
      errorHandler); 
    }); 
} 

,然后用调用它:

db.readMyData(foo, bar, function(result) { 
    // work with result here 
}); 
+0

嘿菲利克斯, 非常感谢!这正是我想知道的。 – Schoerlock 2012-01-04 13:23:47