Html5 WebSql事务与alert有奇怪的表现

时间:2011-06-23 06:02:28

标签: javascript html5 transactions local-storage web-sql

当我在代码中添加一些警报时,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>');
    });

更改后的行为更改: 前两笔交易不会发生。

这是预期的行为吗?如果是,那么它是如何合理的呢?

1 个答案:

答案 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)