2013-07-04 98 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