JavaScript setTimeout循环只运行两次就返回错误:

JavaScript setTimeout loop only running twice before returning error:

本文关键字:两次 返回 错误 循环 setTimeout 运行 JavaScript      更新时间:2023-09-26

我一直在做一个处理XML文件的网站,一旦我增加了一点处理,我就遇到了一个问题。我遇到的问题是使用setTimeout让浏览器休息一下"呼吸",这样它就不会崩溃,试图将一堆信息加载到innerHTML中。当我加载它时,它只循环两次,然后返回错误"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不返回任何东西(与函数相反),这将不会有任何预期的效果-更不用说您正在寻找的那个了。而且,在Chrome中,这样做会使浏览器无响应。

你想传递一个引用到以后要执行的函数:

setTimeout(process, 1);