为什么使用setTimeout()会出现错误"此加载项没有响应"仍然会发生?

时间:2017-08-06 08:30:59

标签: office-js

对于长时间运行的加载项操作,我按照Resource limits and performance optimization for Office Add-ins中的建议使用setTimeout()(第34节"设计和实现技巧"):

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 个答案:

答案 0 :(得分:0)

原因似乎是超时设置为零毫秒。因此,如果循环足够长,则加载项将挂起。

最好的解决方案可能是尽可能从Word.run语句中提取逻辑。例如,您可以在调用Word.run之前构造表条目,然后只需在一次调用中设置多行值,而不是多次重复调用insertRow。