2

我正在尝试在字符串中插入大约 58000 行查询。但是在 8000 左右的行之后,我得到一个超时错误。

我已经尝试过使用 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 执行超出超时”。

感谢您的任何帮助!

最好的祝福。

4

1 回答 1

2

您需要将您的更改setTimeout()为不立即执行该功能。从此改变:

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

对此:

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

正如您之前所拥有的那样,它会立即执行store_html(results, rows_complete)并将返回值传递给 `setTimeout() ,这不会延迟任何事情。这是一个常见的错误(我今天回答的第二个问题)。

于 2012-10-14T02:03:42.570 回答