javascript数据库操作的对象方法中的异步回调
asynchronous callback within a object method for javascript database operations
我想将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
});
相关文章:
- Meteor:异步回调问题
- JavaScript中的异步回调
- 如何将此异步回调转换为生成器
- 在Nodejs中堆叠异步回调事件的最佳方式
- 从异步回调中获取值
- jasmine 2-在jasmine指定的超时时间内未调用异步回调.DEFAULT_TIMEOUT_INTERVAL
- 将数据注入异步回调(使用 node.js)
- 由于异步回调,变量被覆盖
- 管理Meteor中的异步回调
- 如何等到异步回调完成后才能使用检索到的数据
- Node.JS函数返回异步回调函数的值
- 将Node REPL调整为不阻塞异步回调的提示
- 如何正确地将异步回调与react中的表单操作连接起来
- 返回异步回调作为最佳实践
- 使用其他模块中的函数,避免异步回调地狱
- Node.js:异步回调混淆
- JavaScript中的调试技术.异步回调
- Javascript OOP-在异步回调中丢失了这一点
- 在 JavaScript 中的异步回调函数中访问“this”
- 异步回调后返回