2017-02-24 35 views
1

我剛剛創建了一個(JS)Word插件,發現長​​時間的同步操作可能會導致崩潰。在這些情況下,會顯示以下錯誤 - [外接錯誤很抱歉,我們不得不重新啓動,因爲此插件未響應。]長時間運行崩潰Office插件(JS)

enter image description here

下面的代碼上點擊一個按鈕跑。

function scanText() { 
 

 
     Word.run(function (context) { 
 
      var body = context.document.body; 
 

 
      context.load(body, 'text'); 
 

 
      return context.sync().then(function() { 
 
       
 
       var r = thisOperationCanTakeALongTimeIfDocIsLarge(body.text); 
 

 
      }); 
 
     }) 
 
     .catch(errorHandler); 
 
    }

如何防止這種情況的發生?我應該使長操作異步嗎?這在這種情況下如何實現?

回答

2

我終於找到了解決這個一個好辦法...我使用一個WebWorker像這樣:

function scanText() { 
 
     var w; 
 

 
     if (typeof (w) == "undefined") { 
 
      w = new Worker("./Scripts/myWebWorker.js"); 
 
     } 
 
     else 
 
     { 
 
      showNotification("Sorry! No Web Worker support."); 
 
     } 
 

 
     w.onmessage = function (event) { 
 
      showNotification(event.data); 
 
     }; 
 

 
     Word.run(function (context) { 
 
      var body = context.document.body; 
 

 
      context.load(body, 'text'); 
 

 
      return context.sync().then(function() { 
 
       w.postMessage(body.text); 
 
      }); 
 
     }) 
 
     .catch(errorHandler); 
 
    }

而且myWebWorker.js文件:

self.importScripts([...some scripts i need...]); 
 

 
self.addEventListener("message", function (e) { 
 
    var r = thisOperationCanTakeALongTimeIfDocIsLarge(e.data); 
 
    postMessage(r); 
 
}, false);