JavaScript:自定义callBack函数

时间:2015-12-28 08:14:12

标签: javascript callback nw.js

我是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获取数据,我希望它为我返回sqlData(它是一个数组)。问题是当我调用函数获取返回值时,它没有完成从WebSql获取数据,所以我没有。我认为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返回?

1 个答案:

答案 0 :(得分:1)

回调是一些简单的函数,在某些工作完成后调用,在javascript中你可以在变量中传递它,所以在你的异步/工作函数中你必须调用回调函数(比如{{1一旦它完成了工作。

所以你的代码应该是

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,...) //当您有错误但没有结果时