2013-02-10 1 views
0

저는 webSql을 사용하고 있습니다.이 작은 것을 제외하고는 모든 것을 알아 냈습니다. 두 개의 테이블 (A와 B)이 있다고 가정 해 봅시다. 테이블 A에 삽입하고 최신 ID를 얻습니다.이 ID를 테이블 B에 secundary 키로 삽입합니다. 두 경우 모두 테이블에 자동 증가 ID가 있습니다.두 개 이상의 테이블에 삽입하는 WebSQL

아래 예제에서 "경고 (TableAId)"를하면 올바른 값을 얻습니다. 그러나 TableB에 삽입하면 비어 있습니다. 문제는 함수 (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); 
+0

WebSQL은 더 이상 사용되지 않습니까? –

+0

여전히 phonegap (http://docs.phonegap.com/en/2.1.0/cordova_storage_storage_storage.md.html#Storage)에서 매우 활발하지만 답장을 보내 주셔서 감사합니다. –

+0

나는 phonegap이 어떻게 커버 아래에 그것을 구현하는지 모르겠지만, 스펙은 http://www.w3.org/TR/webdatabase/에서 매우 명확하다. 아마도 IndexedDB를 고려해야 할 것인가? –

답변

1

비동기이기 때문에 두 번째 작업을 호출하기 전에 첫 번째 작업이 완료 될 때까지 기다려야합니다.

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);