未调用Google Chrome,WebWorks,HTML5Database,transaction()和alert - 事务回调

时间:2012-01-26 09:51:27

标签: google-chrome blackberry-webworks ripple

我们遇到了一个奇怪的情况。我们打电话给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}}

1 个答案:

答案 0 :(得分:0)

我怀疑这个错误是一个时间问题。

数据库事务是异步的,而警报语句是同步的(阻止UI),因此在执行警告语句时不保证事务调用已完成:

  
    

如果我们使用alert()调用跟踪事务调用

  

建议完全删除alert()语句。