JavaScript setTimeout loop only running twice before returning error:
JavaScript setTimeout loop only running twice before returning error:
我一直在一个处理 XML 文件的网站上工作,一旦我添加了更多处理,我 运行 就遇到了问题。我遇到的问题是使用 setTimeout 让浏览器中断到 'breathe',这样它就不会在尝试将一堆信息加载到 innerHTML 中时崩溃。当我加载它时,它只循环两次,然后 returns 错误 "VM###:1"(### 不断变化)。
var i = 0;
process();
function process(){
if (i < x.length) {
var name = $(x[i]).find("Description[DescriptionCode='DEF']").text();
var ixx = x.length + (20 - (x.length % 20));
var ix = Math.round((i+10) / 20);
var type = "";
var desc = $(x[i]).find("Description[DescriptionCode='DES']").text();
var lamp = desc;
var g = 1;
var id = $(x[i]).find("PartNumber").text();
var ddId = "D" + id + "D"
var price = $(x[i]).find("Pricing[PriceType='RMP']").find("Price").text();
for (n=0;(g == 1) && (n < sType.length); n++) {
if (desc.indexOf(sType[n].type) > -1) {
type = sType[n].type;
lamp = lamp.replace(sType[n].type, '');
g = 0;
}
};
for (n=0;(g == 1) && (n < sVolume.length); n++) {
if (desc.indexOf(sVolume[n].vol) > -1) {
vol = sVolume[n].vol;
lamp = lamp.replace(sVolume[n].vol, '');
g = 0;
}
};
for (n=0;(g == 1) && (n < sYear.length); n++) {
if (desc.indexOf(sYear[n].year) > -1) {
year = sYear[n].year;
lamp = lamp.replace(sYear[n].year, '');
g = 0;
}
};
document.getElementById("productDiv").innerHTML += "The stuff I'm processing goes here.";
i++;
setTimeout(process(), 1);
}
};
您正在 setTimeout
中调用函数 process
:
setTimeout(process(), 1);
因为 process
returns 什么都没有(与函数相反),这不会有任何预期的效果——更不用说你正在寻找的效果了。此外,在 Chrome 中,这样做会使浏览器无响应。
您想要传递对稍后执行的函数的引用:
setTimeout(process, 1);
我一直在一个处理 XML 文件的网站上工作,一旦我添加了更多处理,我 运行 就遇到了问题。我遇到的问题是使用 setTimeout 让浏览器中断到 'breathe',这样它就不会在尝试将一堆信息加载到 innerHTML 中时崩溃。当我加载它时,它只循环两次,然后 returns 错误 "VM###:1"(### 不断变化)。
var i = 0;
process();
function process(){
if (i < x.length) {
var name = $(x[i]).find("Description[DescriptionCode='DEF']").text();
var ixx = x.length + (20 - (x.length % 20));
var ix = Math.round((i+10) / 20);
var type = "";
var desc = $(x[i]).find("Description[DescriptionCode='DES']").text();
var lamp = desc;
var g = 1;
var id = $(x[i]).find("PartNumber").text();
var ddId = "D" + id + "D"
var price = $(x[i]).find("Pricing[PriceType='RMP']").find("Price").text();
for (n=0;(g == 1) && (n < sType.length); n++) {
if (desc.indexOf(sType[n].type) > -1) {
type = sType[n].type;
lamp = lamp.replace(sType[n].type, '');
g = 0;
}
};
for (n=0;(g == 1) && (n < sVolume.length); n++) {
if (desc.indexOf(sVolume[n].vol) > -1) {
vol = sVolume[n].vol;
lamp = lamp.replace(sVolume[n].vol, '');
g = 0;
}
};
for (n=0;(g == 1) && (n < sYear.length); n++) {
if (desc.indexOf(sYear[n].year) > -1) {
year = sYear[n].year;
lamp = lamp.replace(sYear[n].year, '');
g = 0;
}
};
document.getElementById("productDiv").innerHTML += "The stuff I'm processing goes here.";
i++;
setTimeout(process(), 1);
}
};
您正在 setTimeout
中调用函数 process
:
setTimeout(process(), 1);
因为 process
returns 什么都没有(与函数相反),这不会有任何预期的效果——更不用说你正在寻找的效果了。此外,在 Chrome 中,这样做会使浏览器无响应。
您想要传递对稍后执行的函数的引用:
setTimeout(process, 1);