javascript数据库操作的对象方法中的异步回调

asynchronous callback within a object method for javascript database operations

本文关键字:异步 回调 方法 对象 数据库 操作 javascript      更新时间:2023-09-26

我想将SQLite数据库命令封装在"DBManager"类中。为了读取数据,我写了以下几行:

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(),return命令会在事务方法及其内部内容之前执行。

如何处理它,使readMyData()的返回值不为空,而是包含myData数组?

你不能,你必须提供一个回调到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
});