2013-10-05 2 views
1

다음 코드와 같이 주 스레드를 계속할 수있는 비동기 호출 (SELECT 문)을 작성하려고합니다 ("A" 2, "B") :웹 SQL 데이터베이스 - asyc 호출을 실행하고 계속하십시오.

function test(tx) { 

// Drop Table 
tx.executeSql('DROP TABLE IF EXISTS city'); 

// Create Table 
tx.executeSql("CREATE TABLE IF NOT EXISTS city (id, name)"); 

// Insert 2 rows 
tx.executeSql("INSERT INTO city (id, name) VALUES (1, 'Roma')"); 
tx.executeSql("INSERT INTO city (id, name) VALUES (2, 'Bari')"); 


alert("A"); 

    tx.executeSql('SELECT * FROM city', [], function (tx, results) 
    { 
     alert(results.rows.length); 
    }, null); 

alert('B'); 
} 

하지만, "A", "B"를 얻을, 2

내가 "A"를 실행 순서를 달성 할 수있는 방법이, "B"?

감사합니다. Paul

+0

[웹 SQL 데이터베이스에 대한 동기식 쿼리] 가능한 복제본 (http://stackoverflow.com/questions/3903155/synchronous-query-to-web-sql-database) –

답변

0

이것은 websql API의 주요 문제점 중 하나입니다. 그것은 IndexedDB API에서 고쳐졌으며, spec은 모든 트랜잭션에 대해 배치되어야하며 트랜잭션은 반드시 순서대로 실행되어야합니다. WebSQL은 그 조건이 없으므로 어떤 순서로도 실행할 수 있습니다.

해결 방법은 요청 성공 콜백을 사용하는 것입니다. stackoverflow에는 예제가있는 개념을 설명하는 스레드가 있습니다.