2017-02-24 4 views
1

Ich habe gerade ein (JS) Word-Add-in erstellt und festgestellt, dass lange synchrone Operationen zum Absturz bringen können. In diesen Fällen wird die folgende Fehlermeldung angezeigt - [ADD-IN ERROR Sorry, mussten neu starten wir, weil diese Add-in nicht reagiert.]Lange Operationen Absturz Office Addin (JS)

enter image description here

Der folgende Code auf einer Schaltfläche klicken RAN .

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); 
 
    }

Wie verhindere ich, dass dies geschieht? sollte ich die lange Operation asynchron machen? Wie wird dies in diesem Zusammenhang erreicht?

Antwort

2

Ich habe endlich einen guten Weg, dies zu lösen gefunden ... Ich benutze einen WebWorker wie so:

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); 
 
    }

Und die myWebWorker.js Datei:

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

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

Verwandte Themen