2015-12-28 195 views
2

我是js程序的新手,请原谅,如果有些不明确,但让我知道问题。JavaScript:自定义回调函数

请第一次看到我的代码:

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

回调是简单的功能时,有些作品完成时调用,在JavaScript中,你可以通过它的变量,因此在异步/工人功能你必须调用回调函数(如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,...) //当你没有错误只是结果
callback(error) //当你有错误,没有结果

+0

T回答! 1.我是否需要实现回调函数?像函数returnArray(datas){返回数据; }; 2.如何获取回报数据?如何:var result = catchDataFromDB(db,tableName,returnArray);或var结果; catchDataFromDB(db,tableName,returnArray(t)){ result = t; }); – Raniys

+0

如果你的函数没有做任何异步,不需要进行回调,你只需在你的回调中继续正常的操作就可以了,看看他可能会有所帮助http://www.tutorialspoint.com/nodejs/nodejs_callbacks_concept.htm , – Bek

+0

在学习回调之后,我鼓励你学习JavaScript Promises,因为回调不是空闲的解决异步代码的解决方案,但在转移到承诺之前很好学习 – Bek