2011-06-11 26 views
0

我有這樣的代碼JavaScript文件:在javascript函數中需要幫助db.transaction ....是否有延遲?

function getProvincialStandardForRace(seedAge, seedGender, seedCourse, seedDistance, seedEvent) { 

    var seedAge; 
    var seedGender; 
    var seedCourse; 
    var seedDistance; 
    var seedEvent; 
    // Declare SQL database variables 
    var shortName = 'SwimChamp'; 
    var version = '1.0'; 
    var displayName = 'SwimChamp'; 
    var maxSize = 5*1024*1024; 
    var db = openDatabase(shortName, version, displayName, maxSize); 

    db.transaction (
     function(transaction) { 
      transaction.executeSql(
       'SELECT * FROM standards WHERE (age=? AND gender=? AND course=? AND distance=? AND event=?);', 
       [seedAge, seedGender, seedCourse, seedDistance, seedEvent], 
       function(transaction, result) { 
        localStorage.standardRetrieved = result.rows.item(0)['provstandard']; 
        console.log(localStorage.standardRetrieved); 
       } 
      ); 
     } 
    ); 
    console.log(localStorage.standardRetrieved); 
} 

爲什麼第二console.log,在一個db.transaction之外,其實我的成功函數內console.log之前執行?

我完全困惑。看起來執行db.transaction有延遲,db.transaction執行後的代碼最後執行db.transaction

回答

0

executeSql函數內部的函數是sql執行時的回調函數,而executeSql函數是異步的。所以executeSql函數立即返回,第二個console.log函數被調用,executeSql函數完成並調用第一個console.log。

+0

謝謝@joekarl - 我一直難住!所以我的問題是函數返回到一箇舊值的網頁,然後新的值是異步發現,但爲時已晚。所以我最終看到一箇舊值返回給用戶。你可以請建議一個修復程序,以便該函數返回最新值? – AlanW 2011-06-11 10:53:18

+0

我試過設置一個變量= 0,然後只有在executeSql函數成功時才設置爲1。然後,我在我的.html頁面上嘗試了一個for循環,等到現在我的html頁面掛起,並且Safari瀏覽器說有一個緩慢的腳本。我把它看着,一切都在運行,但是由於異步問題而不正確。幫幫我!? – AlanW 2011-06-11 17:22:29