2013-10-05 30 views
1

我試圖做一個異步調用(SELECT語句),它允許我繼續主線程,如下面的代碼所示(我需要執行序列:「A」, 2, 「B」):Web 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」,2, 「B」?

謝謝。 Paul

+0

[同步查詢到Web SQL數據庫]的可能重複(http://stackoverflow.com/questions/3903155/synchronous-query-to-web-sql-database) –

回答

0

這是websql API的一個主要問題。它固定在IndexedDB API中,這樣spec定義了所有必須放置在事務上的請求必須執行的順序。 WebSQL沒有這個條件,因此它可以以任何順序執行。

解決方法是使用請求成功回調。在stackoverflow中有一個線程用例子解釋了這個概念。