2017-08-06 86 views
1

對於長時間運行的附加操作我用setTimeout()Resource limits and performance optimization for Office Add-ins推薦(節「設計和實現技術」):爲什麼使用setTimeout()會出現錯誤「此加載項沒有響應」仍然出現?

Word.run(function (context) { 
    var i = 0; 
    ... 
    prgText.setTotal(LIMIT); 
    setTimeout(writing, PAUSE); 
    return context.sync(); 

    function writing() { 
     var row = tblText.container.insertRow(i + 1); 
     row.insertCell(0).innerHTML = "text"; 
     row.insertCell(1).innerHTML = i++; 
     prgText.setProgress(i); 
     if (i < LIMIT) { 
      setTimeout(writing, PAUSE); 
     } else { 
      ... 
     } 
    } 
}) 

但仍然出現錯誤:

screenshot

如何更改示例以避免錯誤發生?爲什麼這個警告被稱爲錯誤?

請注意,問題不在於如何加速腳本。

完整例子可以在GitHub

+1

你能提供這個word.run的完整代碼嗎?我不清楚你在這裏做什麼,(目前)看起來你在同步之前暫停,因此從未實際同步。 –

+0

完整代碼 - https://github.com/costashu/WordTimeoutAddIn – costashu

+0

在更新進度欄之前,等待很長時間需要10秒。爲什麼這麼久? –

回答

0

中找到的原因似乎是,超時被設置爲零毫秒。所以如果循環足夠長,那麼加載項會掛起。

最好的解決方案是儘可能地從Word.run語句中提取您的邏輯。例如,您可以在調用Word.run之前構造表條目,然後在一次調用中簡單地設置多行值,而不是多次調用insertRow多次。

相關問題