1

コードにアラートを入れると、WebSql のトランザクションの動作がおかしくなりました。3つの取引があります。これらは 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>');
    });

しかし、トランザクションを実行する直前にアラートステートメントを挿入すると。物事は期待どおりに機能しません。

例えば。alert('An alert just before transaction 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>');
    });

変更後の動作の変更: 最初の 2 つのトランザクションは発生しません。

それは期待される動作ですか?はいの場合、それはどのように正当化されますか?

4

1 に答える 1

0

ここにあるコードは、Chrome で期待どおりに機能しています。開発者ツールを開いてコードをコンソールに貼り付けたところ、3 つのトランザクションがすべて作成されていることがわかります。

関数呼び出しは非同期でdb.transactionあるため、すぐに戻りますが、実際にトランザクションを作成するまで、渡したコールバックを必ずしも呼び出すとは限りません。

これが私が起こっていると思う実行の順序です:

オープンデータベース(...)

db.transaction #1 (トランザクションの作成を開始し、すぐに戻ります)

db.transaction #2 (開始...)

トランザクション 3 の前にアラートが表示されます

db.transaction #3 (開始...)

db.transaction #1 コールバック (アラート トランザクション 1)

db.transaction #2 コールバック (アラート トランザクション 2)

db.transaction #3 コールバック (アラート トランザクション 3)

于 2012-04-12T04:10:45.493 に答える