当我在代码中添加一些警报时,WebSql的事务表现得很奇怪。我有三个交易要做。这些是t1,t2和t3。
以下代码可以正常运行。
var db = openDatabase('DBTest', "1.0", "Example DB", "200000");
db.transaction(function(tx) {
alert('Tranasction.1........');
jQuery('body').append('<h1>Added a h1 by t1</h1>');
});
db.transaction(function(tx) {
alert('Tranasction.2........');
jQuery('body').append('<h1>Added a h1 by t2</h1>');
});
db.transaction(function(tx) {
alert('Transaction.3.........');
jQuery('body').append('<h1>Added a h1 by t3</h1>');
});
但是,当我在执行事务之前插入警告语句时。事情没有按预期工作。
例如。如果我发出警报('事务t3之前的警报');
更改后的代码如下所示:
var db = openDatabase('DBTest', "1.0", "Example DB", "200000");
db.transaction(function(tx) {
alert('Tranasction.1........');
jQuery('body').append('<h1>Added a h1 by t1</h1>');
});
db.transaction(function(tx) {
alert('Tranasction.2........');
jQuery('body').append('<h1>Added a h1 by t2</h1>');
});
//THIS ALERT IS ADDED
alert('An alert just before transaction t3');
db.transaction(function(tx) {
alert('Transaction.3.........');
jQuery('body').append('<h1>Added a h1 by t3</h1>');
});
更改后的行为更改: 前两笔交易不会发生。
这是预期的行为吗?如果是,那么它是如何合理的呢?
答案 0 :(得分:0)
您在此处使用的代码在Chrome中正常运行。我只是打开了开发人员工具并将代码粘贴到控制台中,并且可以看到所有三个事务都已创建。
请记住,db.transaction
函数调用是异步的,因此它们会立即返回,但不一定会调用您传入的回调,直到它们实际创建了事务。
以下是我认为正在执行的执行顺序:
的openDatabase(...)
db.transaction#1(开始创建事务,立即返回)
db.transaction#2(开始...)
事务3之前显示警告
db.transaction#3(开始...)
db.transaction#1回调(警报事务1)
db.transaction#2回调(警报事务2)
db.transaction#3回调(警报事务3)