我正在尝试在字符串中插入大约 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 + "nr";
}
return i;
}
所以。。我得到"Javascript执行超过超时"。
感谢您的任何帮助!
此致敬意。
您需要
更改setTimeout()
以不立即执行该函数。 从此更改:
setTimeout(store_html(results, rows_complete), 50);
对此:
setTimeout(function() {store_html(results, rows_complete)}, 50);
就像你之前一样,它立即执行store_html(results, rows_complete)
并将返回值从该值传递给'setTimeout(),这不会延迟任何东西。 这是一个常见的错误(我今天回答的第二个问题)。