2012-10-13 39 views
2

我試圖在字符串內插入大約58000行查詢。但在8000行左右後出現超時錯誤。如何從查詢中讀取行時避免超時(Phonegap + Javascript)

我已經嘗試過使用SetTimeout函數,但它沒用。

檢查我的工作代碼:

function onQuerySuccess(tx, results) { 
    console.log("Entering onQuerySuccess"); 
    if(results.rows) { 
    console.log("Rows: " + results.rows.length); 
    var len = results.rows.length; 

    if(len > 0) { 

    store_html(results, 0); 

    console.log("Finished Reading Rows: " + len);  
    saveNotes(); 
    console.log("Finished Saving Notes"); 

} else { 
    //This should never happen 
    console.log("No rows."); 
    } 
    } else {  
     alert("No records match selection criteria."); 
     } 
     console.log("Leaving openView"); 

function store_html(results, rows_complete){ 
    rows_complete=store_html_input(results, rows_complete); 
    console.log("Returning row:" + rows_complete); 

    if (rows_complete<results.rows.length) 
    { 
     setTimeout(store_html(results, rows_complete), 50); 
    } 

} 

function store_html_input(results, rows_complete){ 
    for(var i = rows_complete; i < rows_complete+100; i++) { 
      gpsTextFile = gpsTextFile + results.rows.item(i).section + ' ' +  results.rows.item(i).timestamp + ' ' +        results.rows.item(i).latitude + ' ' + 
      results.rows.item(i).longitude + ' ' + results.rows.item(i).acx + ' ' +  results.rows.item(i).acy + ' ' + 
      results.rows.item(i).acz + ' ' + results.rows.item(i).speed; 
      gpsTextFile = gpsTextFile + "\n\r"; 
    } 
    return i; 
} 

所以..我得到說,「JavaScript執行超過超時」。

謝謝你的任何幫助!

最好的問候。

+0

您是否嘗試記下您一次輸入的行數?嘗試像5或10,看看你是否仍然有錯誤。 'for(var i = rows_complete; i davehale23

回答

2

您需要將您的setTimeout()更改爲不立即執行該功能。從這一變化:

setTimeout(store_html(results, rows_complete), 50); 

這樣:

setTimeout(function() {store_html(results, rows_complete)}, 50); 

當你收到了它,它立即執行store_html(results, rows_complete)和返回值傳遞給`的setTimeout()這是不拖延任何東西。這是一個常見的錯誤(我今天回答了2nd one of these problems)。

+0

jfriend00!這真是訣竅!謝謝!!你知道我在哪裏可以在網上找到關於這個sintax的信息? – RickON

+0

@RickON - 我不確定你在問什麼。 'setTimeout()'接受函數引用,因爲它是第一個參數,你可以在這裏看到(https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Functions_and_function_scope)。您可以傳遞函數的名稱,也可以使用匿名函數(這是我所建議的)。你可以閱讀關於匿名函數[這裏](http://thoughtsonscripts.blogspot.com/2012/01/javascript-anonymous-functions.html)或許多其他頁面,你可以找到一個谷歌搜索「JavaScript匿名函數」 。 – jfriend00