JavaScript: 自定义回调函数

JavaScript: custom callBack function

我是js程序新手,有不懂的地方请多多包涵,有问题请教我。

请先看我的代码:

function catchDataFromDB(db, tableName, callBack) {

var sqlStr = 'SELECT * FROM ' + tableName;
var sqlData = [];
db.transaction(function(t) {
        // Query out the data
        t.executeSql(sqlStr, [], function(t, SQLResultSet) {
            var len = SQLResultSet.rows.length,
                row;
            for (var i = 0; i < len; i++) {
                row = SQLResultSet.rows.item(i);
                sqlData.push(row);
            }
            console.log(sqlData);
        });
    },
    function(SQLError) {
        console.warn(SQLError.message);
    });
 return sqlData;
}

此函数用于从 WebSql 获取数据,我希望它 return 是我的 sqlData(它是一个数组)。问题是当我调用函数获取 return 值时,它还没有完成从 WebSql 获取数据,所以我得到了 nil。我认为 callBack 函数对于获取正确的数据很有用,但我不知道该怎么做。感谢您的帮助。

补充: 我从this page找到了一个方法,代码如下:

function doSomething(callback) {
// ...

// Call the callback
callback('stuff', 'goes', 'here');
}

function foo(a, b, c) {
// I'm the callback
alert(a + " " + b + " " + c);
}

doSomething(foo);

但是当我调用函数 doSomething 时,如何从函数 foo 中获取 return?

callback 是一些工作完成时调用的简单函数,在 javascript 中你可以将它传递给变量,所以在你的 async/worker 函数中一旦完成作业,您必须调用回调函数(如 callback(result))。

所以你的代码应该是

function catchDataFromDB(db, tableName, callBack) {
  var sqlStr = 'SELECT * FROM ' + tableName;
  db.transaction(function(t) {
      // Query out the data
      t.executeSql(sqlStr, [], function(t, SQLResultSet) {
        var len = SQLResultSet.rows.length,
          row;
        for (var i = 0; i < len; i++) {
          row = SQLResultSet.rows.item(i);
          sqlData.push(row);
        }
        callBack(null, sqlData);
      });
    },
    function(SQLError) {
      callBack(SQLError.message);
    });
}

按照惯例,回调的第一个参数应该是错误(如果有的话),其余参数是结果
callback(null, result1, result2,...) // 当你没有错误时 result
callback(error) // 当你有错误但没有结果时