0

私は webSql を使用していますが、この小さなことを除いて、すべてを理解しました: 2 つのテーブル (A と B) があり、最初に、テーブル A に挿入して最新の ID を取得したいとします。これをセカンダリ キーとしてテーブル B に挿入します。どちらの場合も、テーブルには自動インクリメント ID があります。

一番下の例から "alert(TableAId)" すると、正しい値が得られます。ただし、TableB に挿入すると、空になります。function(tx, results) が非同期であるため、実際に TableAId を取得する前に TableB に挿入することが問題である可能性があると思います。

ここで適切な解決策は何でしょうか?

var TableAId = "";
tx.executeSql('INSERT INTO TableA (value) VALUES (?)', [myValue], 
    function(tx, results) {
        TableAId = results.insertId;
    }, errorCB);

tx.executeSql('INSERT INTO TableB (key_from_TableA) VALUES (?)', [TableAId], 
    function(tx, results) {
        TableBId = results.insertId;
    }, errorCB);
4

1 に答える 1

1

これは非同期であるため、最初の操作が完了するまで待ってから、2 番目の操作を呼び出す必要があります。

tx.executeSql('INSERT INTO TableA (value) VALUES (?)', [myValue], 
    function(tx, results) {
        var TableAId = results.insertId;
        tx.executeSql('INSERT INTO TableB (key_from_TableA) VALUES (?)', [TableAId], 
             function(tx, results) {
                TableBId = results.insertId;
             }, errorCB);
    }, errorCB);
于 2013-02-10T22:31:13.467 に答える