0

現在、WebSql の非同期 API をいじっています。このコードを考えると:

        db.transaction(
            function (tx) {                      
                tx.executeSql("SELECT * FROM table",
                    [],
                    function(t, resultSet){ //Anonimous function implementing SQLStatementCallback
                        t.executeSql(...); //#1 
                    }
                ); 
            },
            function (err) {
                console.error("Error in transaction");                         
            },
            function(){
                console.log("Transaction complete"); //#2                  
            }   
        );

これは仕様では見つけられませんでした。の 3 番目のパラメータexecuteSqlは、 を実装する関数ですSQLStatementCallback。このインターフェイスの最初のパラメーターは別のものですSQLTransaction(私のコードでは t という名前です)。このトランザクション オブジェクトを使用して文を実行し続けることは可能でしょうか? 特に:

  1. tと同じですかtx
  2. 別の SQL 文を実行するために使用できtますか? この場合、#1 は #2 の前に実行されることが保証されていますか?
4

2 に答える 2

1
  1. はい、トランザクション オブジェクトは と で同じtですtx

  2. はい、すでに onsuccess ハンドラのコールバックをリッスンしているため、2# の前に 1# を実行する権利があります。リクエストの順序付けを実現したいので、を使用しますt。並行して実行したいときはいつでも、 を使用しますtx私のwebsql リクエスト エグゼキュータ実装 YDN-DB ライブラリのコードを参照してください。

于 2013-03-05T06:21:03.257 に答える
0

はい、これが WebSQL API の仕組みです。

非同期実行のため、これが1 つのトランザクションで複数のコマンドを実行する唯一の方法です。

于 2013-02-27T18:52:01.263 に答える