Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/420.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
客户端的异步JavaScript函数(如何编写回调)_Javascript_Multithreading_Asynchronous_Web Worker - Fatal编程技术网

客户端的异步JavaScript函数(如何编写回调)

客户端的异步JavaScript函数(如何编写回调),javascript,multithreading,asynchronous,web-worker,Javascript,Multithreading,Asynchronous,Web Worker,我面临一个问题,基本上我有一个长时间运行的任务,读取编码的字节,然后解析字节以查找其中的数据 functionLongRunningTask() { //bytes returned from office.js (GetFileAsync Method) var documentText = OSF.OUtil.encodeBase64(resultSlice.value.data); // Open the document, which is stored as a b

我面临一个问题,基本上我有一个长时间运行的任务,读取编码的字节,然后解析字节以查找其中的数据

  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;
                      }
  }
functionLongRunningTask(){
//从office.js(GetFileAsync方法)返回的字节数
var documentText=OSF.OUtil.encodeBase64(resultSlice.value.data);
//打开文档,该文档存储为base64字符串。
var doc=new openXml.OpenXmlPackage(documentText);
var customXMLpart=doc.getPartByUri(“/customXml/item1.xml”);
如果(customXMLpart=='undefined'| | customXMLpart==null){
window.location='Page1.aspx'
}
否则{
if(window.DOMParser){
var parser=新的DOMParser();
xmlDoc=parser.parseFromString(customXMLpart.data,“text/xml”);
}
var customxml=xmlDoc.getElementsByTagName(“DocumentID”);
var documentid=0;
for(var i=0;i
所有的读取和遍历都是在客户端完成的,没有服务器端参与。现在,当我以同步方式运行这个长时间运行的任务时,我的应用程序运行在office word 2013(office应用程序基本上)。UI被冻结并停止响应,然后重新启动Office应用程序

我需要以异步方式来做,这样UI就不会冻结。我正在使用HTML5和IE9+。任何帮助都将不胜感激


关于

您无法在WebWorker中访问DOM解析器,因此此方法不适用。您需要在计时器事件上运行部分代码


这里有一个库,可以帮助您针对计时器运行代码->

我们不能使用类似回调的功能。var doc=new openXml.OpenXmlPackage(documentText);当这个方法完成时,它发送回调,然后我就可以访问DOM ParserOK了。那么问题在于OPenXmlPackage的实现?您能在调试窗口中确认这一点吗?基本上,我尝试使用var doc=new openXml.OpenXmlPackage(documentText)读取所有字节;然后我遍历var customXMLpart=doc.getPartByUri(“/customXml/item1.xml”);如果我找到了什么,那么我就设置window.location,这样停止UI的方法就是var doc=new openXml.OpenXmlPackage(documentText);当文档字节超过50KB时,它会停止,openxmlpackage中没有错误,只是这需要时间,而且这段时间会停止推动office app刷新自己的UI。您可以在worker中打开它,然后将消息标记发送回主(UI)线程-是