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

标签 javascript

我正在尝试启动一个加载程序来表明我正在执行一个进程。将 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);
    }
};

我习惯于使用 Android,当我这样订购进程时,它通常会先启动第一个进程。

为什么我的加载程序直到我的文件被转换并放入我的输出 TextView 后才启动?我怎样才能让它按照我想要的方式工作?

我不会先将文件上传到服务器。我正在从文件中读取文本,将文本放置在 TextView (输入)中,从输入中获取文本,转换新文本并将其放入输出 TextView 中。然后最后一个按钮创建 geojson 文件并下载它。

最佳答案

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

可能的解决方案:

使用Web Worker在单独的线程上执行转换过程。这将使您的 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);
    }
};

关于javascript - 加载程序在进程完成后才会启动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48425609/

相关文章:

javascript - 是否应该在生产版本中删除 NGXS NgxsLoggerPluginModule?

javascript - html中的隐藏文本框

javascript - Webpack 无法解析相对路径

javascript - 连接函数

javascript - 使用 Jquery 为 Logo 制作动画

javascript - 到底什么是 Javascript 原型(prototype)?库或内置 Javascript 的东西?

javascript - 在结束的 body 标签的末尾添加 defer 到脚本标签是多余的吗?

javascript - 如何在 jQuery 中获取数组中的所有同级元素...?

javascript - 如何更新单选按钮的状态以匹配轮播状态?

javascript - Angular JS : rest API is called with a delay