我试图从我的Web
SQL数据库中调用一个SELECTS值的函数。我想将SELECTED值返回到父函数内的变量中。但是,无论是否为全局变量,变量始终返回空白。
可以看到selectRow函数内部的console.log记录了数据库查询中的正确值,但是console.log在initDB函数中显示为空白。
我还注意到,空白日志显示在selectRow函数内部的日志之前。我找到了一些论坛,人们在这里谈论数据库事务是异步的。我知道这就是为什么我的变量返回为空白的原因。但是,在无数次犹豫不决之后,我仍然找不到解决此异步问题的方法。
/** Initialize Database **/
function initDB(){
createTable();
var pleaseWork = selectRow("SELECT * FROM planets;");
console.log(pleaseWork);
}
/** Select Row from Table **/
function selectRow(query){
var result = [];
db.transaction(function (tx) {
tx.executeSql(query, [], function(tx, rs){
for(var i=0; i<rs.rows.length; i++) {
var row = rs.rows.item(i)
result[i] = {
id: row['id'],
name: row['name']
}
}
console.log(result);
}, errorHandler);
});
return result;
}
您可以更改selectRow()
函数以将回调作为参数接受,该回调将与结果一起调用而不是返回结果:
/** Initialize Database **/
function initDB(){
createTable();
selectRow("SELECT * FROM planets;", function(pleaseWork) {
console.log(pleaseWork);
// any further processing here
});
}
/** Select Row from Table **/
function selectRow(query, callBack){ // <-- extra param
var result = [];
db.transaction(function (tx) {
tx.executeSql(query, [], function(tx, rs){
for(var i=0; i<rs.rows.length; i++) {
var row = rs.rows.item(i)
result[i] = { id: row['id'],
name: row['name']
}
}
console.log(result);
callBack(result); // <-- new bit here
}, errorHandler);
});
}
你能告诉我如何只对某些代码块运行事务吗?我有@Transactional的服务函数,并从它们调用存储库函数,在那里执行查询。但当查询失败时,由于事务必须结束,服务功能也随之失效。那么,当存储库函数失败时,如何返回null值呢?我需要在失败时捕获空值,并继续一些逻辑。我的代码: 我尝试了@davidxxx的答案,得到了这个错误:
我试图弄清楚如何从angular 6/typescript应用程序向firebase数据库编写事务。 下面是我使用的一个工作示例作为指导: 我确定的关键部分如下: 1)创建一个数组来保存事务:const transactions=[]; 2)开始事务:返回db.runtransactions(function(transactions){… 3)使用事务:transaction.set(newPh
这里我有一个函数,它应该返回秒数作为变量sec,但是return语句在数据库事务之前运行,所以我一直没有定义。我可以做些什么来确保事务在回电话之前完成。类似于用于。
是否可以对同一个事务多次调用< code > dslcontext . transaction result()? 我希望在同一个事务中向不同的表中插入行,并将主键返回给封闭(非事务)代码块。 我知道我可以创建一些自定义的返回类型来保存多个值,但是从代码可读性的角度来看,最好是多次调用< code > dslcontext . transaction result()并每次传递一个单独的结果。
我有一个视图,它具有激活viewpager的表格布局,当查看页面时,它工作正常,但如果我单击该视图上的某个项目,然后返回到过去的屏幕,我会得到: Java.Lang.IllegalStateException:FragmentManager已经在执行事务。 不确定这是否有所不同,但当我离开这个视图时,我从一个片段变成了一个活动。
问题是返回的数据为NULL。我知道当客户机数据过时时,这是可能的,但是函数没有错误地退出,并且提交为false。 当我使用完全相同的引用来检索数据快照时,将返回正确的值。