我们遇到了一个奇怪的情况。我们打电话给database.transaction(txCallback, txError, txSuccess)
,
如果我们通过alert()
调用跟踪事务调用,则调用txSuccess
函数而不调用txCallback
alert
函数被调用。
这是一个已知错误,还是有合理解释的记录行为?
似乎只发生在Ripple Emulator和Google Chrome(Ripple所基于的)中。 不出现在Safari中,无论是使用console.log
还是<html>
<head>
<script>
function dbalert() {
var db = window.openDatabase("test","1.0","test",1024*1024);
console.log("Next line should read: In transaction callback");
window.transactionCalled = false;
db.transaction(
function (tx) {
console.log("In transaction callback");
window.transactionCalled = true;
},
function (tx, err) {
console.error("ERROR");
console.log(err);
},
function () {
if (window.transactionCalled) {
console.log("Success callback: everything worked!");
} else {
console.error("Success callback: BUT TRANSACTION WAS NEVER CALLED");
}
}
);
/*****
* Change to FALSE to get this working.
*****/
if (true) {
alert("Ok, let's see what happened");
} else {
console.log("Ok, let's see what happened");
}
}
</script>
</head>
<body onLoad="dbalert();">
<div id="out">
</div>
</body>
</html>
,它都按预期运行。
此HTML可以很好地演示这种情况:
{{1}}
答案 0 :(得分:0)
我怀疑这个错误是一个时间问题。
数据库事务是异步的,而警报语句是同步的(阻止UI),因此在执行警告语句时不保证事务调用已完成:
如果我们使用alert()调用跟踪事务调用
建议完全删除alert()语句。