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() に渡されましたが、これは何も遅延していませんでした。これはよくある間違いです (今日回答したこれらの問題の 2 つ目)。

于 2012-10-14T02:03:42.570 に答える