Javascript 加载程序在进程完成后才会启动

Javascript 加载程序在进程完成后才会启动,javascript,Javascript,我试着启动一个加载器,以表明我有一个进程正在进行。将kml文件转换为geojson。转换部分工作正常。更大的kml文件需要更长的时间来转换,我想显示我的网页在转换文件时正在做一些事情。我有这个: function convertFunction() { loader.style.display = "block"; if(format.value = "kml"){ out.value = JSON.stringify(toGeoJSON["kml"]((n

我试着启动一个加载器,以表明我有一个进程正在进行。将kml文件转换为geojson。转换部分工作正常。更大的kml文件需要更长的时间来转换,我想显示我的网页在转换文件时正在做一些事情。我有这个:

 function convertFunction() {

    loader.style.display = "block";
    if(format.value = "kml"){
         out.value = JSON.stringify(toGeoJSON["kml"]((new DOMParser()).parseFromString(input.value, 'text/xml')), null, 4);
    }
};
我习惯于使用安卓系统,当我这样安排我的进程时,它通常会先启动第一个进程

为什么我的加载程序在文件转换并放入out text视图后才启动?我怎样才能让它按我想要的方式工作


我不会先把文件上传到服务器上。我从文件中读取文本,将文本放在文本视图中输入,从输入中获取文本,转换并将新文本放在输出文本视图中。然后单击最后一个按钮来创建geojson文件并下载它。

加载程序没有显示的原因是转换过程阻塞了代码。这意味着它将保留主线程和UI线程,直到转换过程完成。加载程序将永远不会显示,因为在浏览器有机会显示它之前,转换已经完成

一种可能的解决办法:

使用在单独的线程上执行转换过程。这将使您的UI线程保持空闲,以便加载程序可以显示和设置动画

另一种可能更简单的解决方法:

在页面上显示一些内容以指示转换过程正在进行,并使用setTimeout延迟转换过程,以允许页面更新。请注意,在这种情况下,在转换过程中,您将无法显示任何类型的动画,因为被阻止的UI线程将阻止它制作动画

function convertFunction() {

    if(format.value === "kml"){
        loadingMessage.style.display = "block";
        setTimeout(function () {
            out.value = JSON.stringify(toGeoJSON["kml"]((new DOMParser()).parseFromString(input.value, 'text/xml')), null, 4);
            loadingMessage.style.display = 'none';

            // run any code that would use out.value
        }, 100);
    }
};

这听起来像是你把UI线程绑起来进行解析。因此,它开始加载图像,然后线程在执行解析时被阻塞,然后在解析完成后完成显示图像。不确定解决方案,但可能会在加载图像后触发解析,有些情况下代码毫无意义。你把赋值和比较混为一谈,你的代码使用的方法我完全不知道。现在还不清楚代码与您的描述之间的关系。我认为if有一个输入错误格式。value=kml应该是format.value==kml。不清楚这是否是问题所在。已经修好了。我真的不知道这个头衔是怎么来的,利亚姆,我试过了。还尝试更改代码以使用!=检查该值是否为空。这不是问题所在。它仍然像它应该做的那样在if内部执行这个动作。只是在进程完成之前加载程序没有启动有问题。我刚找到,在设定的时间外阅读。我用了它,它起了作用。甚至加载程序动画。我猜如果文件更大,动画就不会像你说的那样工作?@jamesburnison是的,我相信如果你转换的阻塞代码需要很长时间,动画就会停止。