2013-07-04 97 views
0

我正面臨一個問題,基本上我有長時間運行的任務,讀取編碼字節,然後解析字節以在其中查找數據。客戶端異步JavaScript函數(如何編寫回調函數)

functionLongRunningTask() { 
    //bytes returned from office.js (GetFileAsync Method) 
    var documentText = OSF.OUtil.encodeBase64(resultSlice.value.data); 

    // Open the document, which is stored as a base64 string. 
    var doc = new openXml.OpenXmlPackage(documentText); 
    var customXMLpart = doc.getPartByUri("/customXml/item1.xml"); 

    if (customXMLpart == 'undefined' || customXMLpart == null) { 
    window.location = 'Page1.aspx' 
     } 
     else { 
     if (window.DOMParser) { 
     var parser = new DOMParser(); 
     xmlDoc = parser.parseFromString(customXMLpart.data, "text/xml"); 
     } 
      var customxml = xmlDoc.getElementsByTagName("DocumentID"); 
      var documentid = 0; 
     for (var i = 0; i < customxml.length; i++) { 
       documentid = customxml[i].textContent; 
        } 
      window.location = 'Page2.aspx?documentid=' + documentid; 
         } 
    } 

所有讀取和遍歷都在客戶端完成,沒有服務器端參與其中。現在我的應用程序運行在辦公室字2013(Office APP基本上),當我以同步方式運行這個長時間運行的任務。 UI被凍結並停止響應,並重新啓動Office APP。

我需要以異步的方式做到這樣UI不凍結我使用HTML5和IE 9+。任何幫助將不勝感激

問候

回答

1

你不會有一個WebWorker訪問DOM解析器,所以這種方法並不適用。您需要在計時器事件中運行部分代碼。

這裏是一個可能能夠幫助運行的代碼對計時器的庫 - >https://github.com/jameswestgate/taskjs

+0

着我們碰到這樣的回調。 var doc = new openXml.OpenXmlPackage(documentText);當這個方法完成後,它發送回調,然後我可以訪問DOM解析器 – Salman

+0

好的。所以問題在於OPenXmlPackage的實現?你能否在調試窗口中確認這一點? –

+0

基本上我嘗試讀取所有字節使用var doc = new openXml.OpenXmlPackage(documentText);然後我遍歷var customXMLpart = doc.getPartByUri(「/ customXml/item1.xml」);如果我找到了一些然後我設置window.location所以停止UI的方法是var doc = new openXml.OpenXmlPackage(documentText);並且它在文檔字節超過50 kb時停止,並且openxmlpackage中沒有任何錯誤只需要時間,並且時間會暫停推送辦公應用程序以自行刷新的UI – Salman