客户端的异步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)线程-是