Ms word Office JavaScript API:在Word中为Mac选择范围

Ms word Office JavaScript API:在Word中为Mac选择范围,ms-word,office365,ms-office,office-js,office365-apps,Ms Word,Office365,Ms Office,Office Js,Office365 Apps,我正在使用MicrosoftOfficeJavaScriptAPI进行一个附带项目。我有一些功能可以选择一个范围,以便滚动到文档中的特定位置。这在Office for web中正常工作,但在Office for Mac中,调用context.sync().then()时,我遇到以下错误: 未处理的承诺拒绝:RichApi。错误:ItemNotFound 我找不到关于这个特定错误的任何文档,我也不确定如何排除我可能做错的地方。我错过了什么?正如我所说,这在web界面中起作用 下面是演示问题的最少代

我正在使用MicrosoftOfficeJavaScriptAPI进行一个附带项目。我有一些功能可以选择一个范围,以便滚动到文档中的特定位置。这在Office for web中正常工作,但在Office for Mac中,调用
context.sync().then()时,我遇到以下错误:

未处理的承诺拒绝:RichApi。错误:ItemNotFound

我找不到关于这个特定错误的任何文档,我也不确定如何排除我可能做错的地方。我错过了什么?正如我所说,这在web界面中起作用

下面是演示问题的最少代码示例:

function UI(context) {
    this.context = context;
}

UI.prototype.initialize = function() {
    var paragraphs = this.context.document.body.paragraphs;
    this.context.load(paragraphs);

    document.querySelector('button').addEventListener('click', () => {
        this.context.sync().then(() => {
            this.goToRange(paragraphs.items[0]);
        });
    });
};

UI.prototype.goToRange = function(range) {
    range.select();
    this.context.sync();
};

document.addEventListener('DOMContentLoaded', () => {
    Office.onReady(() => {
        Word.run(context => {
            return context.sync().then(() => {
                new UI(context).initialize();
            });
        });
    });
});

我能想到的唯一一件事是,在某种意义上,对段落客户机对象的引用可能会变得“过时”,可能是因为Mac应用程序中的某些资源限制低于在线界面中的资源限制?(这对我来说是违反直觉的,但这是我唯一想到的。)

我想我找到了问题所在。在整理问题中的最小代码示例时,我偶然发现了一个提示;我一开始删除了太多的代码,遇到了以下错误:

未处理的承诺拒绝:RichApi。错误:批处理函数已传递 对“.run”方法没有返回承诺。函数必须返回 承诺,以便可以释放任何自动跟踪的对象 批处理操作完成时

我认为问题在于,至少在Word for Mac中,您不能在异步事件侦听器中使用由
Word.run
提供的
context
对象。我猜这是因为,如上错误所述,在解析返回的承诺后,某些状态已被释放。我可以通过在事件侦听器中添加对
Word.run
(并使用提供的新鲜
上下文
)的专用调用来使代码正常工作


它在浏览器中运行得很好,这仍然有点奇怪。据推测,在基于浏览器的版本中,同样的状态不会像以前那样积极地发布。

我想我已经解决了这个问题。在整理问题中的最小代码示例时,我偶然发现了一个提示;我一开始删除了太多的代码,遇到了以下错误:

未处理的承诺拒绝:RichApi。错误:批处理函数已传递 对“.run”方法没有返回承诺。函数必须返回 承诺,以便可以释放任何自动跟踪的对象 批处理操作完成时

我认为问题在于,至少在Word for Mac中,您不能在异步事件侦听器中使用由
Word.run
提供的
context
对象。我猜这是因为,如上错误所述,在解析返回的承诺后,某些状态已被释放。我可以通过在事件侦听器中添加对
Word.run
(并使用提供的新鲜
上下文
)的专用调用来使代码正常工作


它在浏览器中运行得很好,这仍然有点奇怪。据推测,在基于浏览器的版本中,同样的状态不会像在浏览器版本中那样被积极地发布。

当一个平台(而不是另一个平台)上发生与承诺相关的错误时,人们怀疑代码没有正确地处理异步性,但在“良好”平台上,计时的结果是,幸运的是,所有事情都以所需的顺序完成。我找不到将代码段放入
Word的方法。请运行不会创建与承诺处理相关的语法错误的
回调。请在中创建一个简单的问题复制,并发布代码。@RickKirkham感谢您的回复!我已经用完整的工作代码示例更新了这个问题。也就是说,在写这个示例时,我想我发现了这个问题。我将发布一个答案。同样的问题当一个平台上发生承诺相关的错误,而不是另一个平台上发生时,怀疑代码没有正确处理异步性,但在“好”平台上,计时工作正常,幸运的是,所有事情都按所需顺序完成。我找不到将代码段放入
Word的方法。请运行不会创建与承诺处理相关的语法错误的
回调。请在中创建一个简单的问题复制,并发布代码。@RickKirkham感谢您的回复!我已经用完整的工作代码示例更新了这个问题。也就是说,在写这个示例时,我想我发现了这个问题。我会在这里发布答案。同样的问题