2016-09-23 52 views
1

我想解析Meteor應用程序中的大csv文件,並顯示語義UI進度組件的進展。但它凍結並只顯示最終結果。在瀏覽器中流星,語義UI進度,同時大csv文件解析

Template.ordersImport.events({ 
    'click button': function (e) { 
     e.preventDefault(); 
     Papa.parse($('#importedFile')[0].files[0], { 
      delimiter: ';', 
      newline: '\n', 
      header: true, 
      fastMode: true, 
      complete: function (result) { 
       $('form').hide(); 
       $('#progress').show(); 
       var totalSize = result.data.length; 
       _.each(result.data, function (item, index) { 
        var progress = (index + 1)/totalSize * 100; 
        $('#progress').progress({ 
         percent: progress 
        }); 
       }); 
      } 
     }); 
    } 
}); 
+0

使用工作線程和更新UI在'step'功能這個答案可能幫助了。 – MasterAM

+0

工作線程在Meteor中不起作用(harrison_papa-parse.js?hash = af12d7c ...&papaworker:14 Uncaught ReferenceError:包沒有定義) –

+0

你是對的。該工作人員不在Meteor包中工作,因爲它全部捆綁到一個文件中,但可以修改庫代碼,以便將工作人員函數(作爲字符串)內聯,將其放入「公共目錄」或等待Meteor支持WebWorker構建目標(有人建議,不確定它會發生)。你仍然可以使用'step'函數,但是(如果你不使用worker,它仍會阻塞)。 – MasterAM

回答

0

代碼在一個線程中運行,所以即使你更新進度變量,它不會呈現到用戶界面,直到完成文件的解析。

在用戶界面中執行冗長的處理不是很好的做法 - 它變得沒有響應,並且可能會導致瀏覽器崩潰,尤其是對於大型文件。

我建議將文件傳遞到服務器,並在那裏進行處理。

https://forums.meteor.com/t/how-to-use-web-worker/17511

,如果你想保持處理在瀏覽器中

How to run an unblocking background task in a Meteor/JavaScript client?