在我的firefox扩展中,我有一个带有一些表的sqlite-database。使用executeAsync(),我更新了表,插入了一些新数据并选择了一些值。select-case给我带来了一些问题。
在handleCompletion()-function中,我可以将从表中检索到的数据传递给另一个函数(例如,还可以向结果发出警报)。但我希望将结果传递回调用函数。我在网上搜索了我的问题的答案,但我找不到解决方案。
我发现:
retrieveData: function() {
var rows = new Array();
if (this.dbConn.connectionReady){
statement = this.dbConn.createAsyncStatement("SELECT * " +
"FROM 'domains' " +
";");
statement.executeAsync ({
handleResult: function(aResultSet) {
var i = 0;
for (let row = aResultSet.getNextRow(); row; row = aResultSet.getNextRow()) {
rows[i] = row;
++i;
}
},
handleError: function(anError) {
alert("error");
},
handleCompletion: function(aReason) {
if (aReason != Components.interfaces.mozIStorageStatementCallback.REASON_FINISHED) {
// something went wrong
alert("error2");
}
}
});
}
return rows;
}此代码不返回预期的结果。该语句是在方法返回Array“row”之后执行的。因此,我的调用函数永远不能从表中接收数据...
我该如何解决这个问题?返回表的数据行有没有超时之类的东西?
非常感谢您的帮助!
发布于 2013-02-09 21:42:31
理想情况下,您应该在上面的示例中处理回调。这就是API开发人员打算使用SQLite的方式。:)
retrieveData: function(_callback) {
...
statement.executeAsync ({
...
handleCompletion: function(aReason) {
...
_callback(rows);
}
});
}以及调用函数的位置:
retrieveData(function(rows) {
// do stuff with rows here
});https://stackoverflow.com/questions/14788754
复制相似问题