【问题标题】:How to avoid timeout while reading rows from a query (Phonegap + Javascript)从查询中读取行时如何避免超时(Phonegap + Javascript)
【发布时间】:2012-10-13 23:56:17
【问题描述】:

我正在尝试在字符串中插入大约 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 执行超时”。

感谢您的帮助!

最好的问候。

【问题讨论】:

  • 您是否尝试过一次记下您输入的行数?尝试 5 或 10 看看是否仍然出现错误。 for(var i = rows_complete; i &lt; rows_complete+5; i++) {

标签: javascript loops cordova crash timeout


【解决方案1】:

您需要将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我今天已经回答了)。

【讨论】:

  • jfriend00!这真的成​​功了!谢谢!!你知道我在网上哪里可以找到关于这个 sintax 的信息吗?
  • @RickON - 我不确定你在问什么。 setTimeout() 将函数引用作为第一个参数,如您所见 here。您可以传递函数的名称,也可以使用匿名函数(这是我的建议)。您可以阅读有关匿名函数 here 或在许多其他页面中您可以通过 Google 搜索“javascript 匿名函数”找到的信息。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-07-17
  • 2012-08-26
  • 2021-11-15
  • 1970-01-01
  • 2023-03-11
  • 1970-01-01
  • 2010-09-30
相关资源
最近更新 更多