NWJS在长循环javascript

时间:2016-08-24 13:34:37

标签: javascript

我在使用javascript时遇到了一些麻烦。 我试图用NW.JS做一个桌面应用程序。我有一个.xml文件,我在我的应用程序中拖放然后它运行一个函数来读取XML做一些东西并在.csv中保存一个新文件 它的工作正常,但现在我可以在功能期间更新进度条...

我尝试setIntervalsetTimeOut(),但我总是得到相同的结果:在功能完成之前没有任何附加内容。

这是我的代码

  //Same as $(document).ready();
  function ready(fn) {
    if (document.readyState != 'loading'){
        fn();
    } else {
        document.addEventListener('DOMContentLoaded', fn);
    }
  }

  //When the page has loaded, run this code
  ready(function(){
    // prevent default behavior from changing page on dropped file
    window.ondragover = function(e) { e.preventDefault(); return false };
    // NOTE: ondrop events WILL NOT WORK if you do not "preventDefault" in the ondragover event!!
    window.ondrop = function(e) { e.preventDefault(); return false };

    var holder = document.getElementById('holder');
    holder.ondragover = function () { this.className = 'hover'; return false; };
    holder.ondragleave = function () { this.className = ''; return false; };
    holder.ondrop = function (e) {
        e.preventDefault();

        var file = e.dataTransfer.files[0],
        reader = new FileReader();
        reader.onload = function (event) {
########I'm doing stuff here to convert file and i want to update the progressbar##########

};
        reader.readAsText(file);
        //reader.readAsDataURL(file);

        return false;
    };
});

感谢您的帮助

最好的问候,

1 个答案:

答案 0 :(得分:0)

在NWJS和Electron中尝试相同的代码后,我发现问题出在“主要” Chromium进程中任何长时间运行的进程都阻止了渲染。解决方案是产生一个通过Node的IPC进行通信的子进程。在this answer中有更多详细信息。